Utiliser le pilote JDBC pour BigQuery
Le pilote Java Database Connectivity (JDBC) pour BigQuery connecte vos applications Java à BigQuery, ce qui vous permet d'utiliser les fonctionnalités de BigQuery avec vos outils et votre infrastructure préférés. Pour connecter des applications non Java à BigQuery, utilisez le pilote Simba Open Database Connectivity (ODBC) pour BigQuery.
Limites
Le pilote JDBC pour BigQuery est soumis aux limitations suivantes :
- Le pilote est spécifique à BigQuery et ne peut pas être utilisé avec d'autres produits ou services.
- Le type de données
INTERVALn'est pas compatible avec l'API BigQuery Storage Read. - Toutes les limites du langage de manipulation de données (LMD) s'appliquent.
Avant de commencer
- Assurez-vous de bien connaître les pilotes JDBC, Apache Maven et le package
java.sql. - Vérifiez que votre système est configuré avec l'environnement d'exécution Java (JRE) 8.0 ou version ultérieure. Pour savoir comment vérifier votre version de JRE, consultez Vérifier l'environnement JRE.
Authentifiez-vous auprès de BigQuery et notez les informations suivantes, qui seront utilisées ultérieurement lorsque vous établirez une connexion avec le pilote JDBC pour BigQuery. Vous n'avez besoin de noter que les informations correspondant à la méthode d'authentification que vous utilisez.
Méthode d'authentification Informations d'authentification Exemple Propriété de connexion (à définir ultérieurement) Compte de service standard Adresse e-mail du compte de service bq-jdbc-sa@mytestproject.iam.gserviceaccount.comOAuthServiceAcctEmailClé de compte de service (objet JSON) my-sa-keyOAuthPvtKeyFichier de clé du compte de service Fichier de clé du compte de service (chemin d'accès complet) path/to/file/secret.jsonOAuthPvtKeyPathCompte utilisateur Google ID client 123-abc.apps.googleusercontent.comOAuthClientIdCode secret du client _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecretJeton d'accès pré-généré Jeton d'accès ya29.a0AfH6SMCiH1L-x_yZOAuthAccessTokenJeton d'actualisation pré-généré Jeton d'actualisation 1/fFAGRNJru1FTz70BzhT3ZgOAuthRefreshTokenID client 123-abc.apps.googleusercontent.comOAuthClientIdCode secret du client _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecretIdentifiants par défaut de l'application Aucun N/A N/A Fichier de configuration Fichier de configuration (objet JSON ou chemin d'accès complet) path/to/file/secret.jsonOAuthPvtKeyObjet de configuration du compte externe Objet de configuration du compte external_account_configuration_objectOAuthPvtKeyAutre Propriété "audience" du fichier de configuration du compte externe //iam.googleapis.com/projects/my-project/locations/US-EAST1/workloadIdentityPools/my-pool-/providers/my-providerBYOID_AudienceUriRécupération de jetons et fichier d'informations sur l'environnement {\"file\":\"/path/to/file\"}BYOID_CredentialSourceProjet utilisateur (uniquement si vous utilisez un pool d'employés) my_projectBYOID_PoolUserProjectURI pour l'emprunt d'identité d'un compte de service (uniquement si vous utilisez un pool de personnel) my-saBYOID_SA_Impersonation_UriJeton Security Token Service basé sur la spécification d'échange de jetons urn:ietf:params:oauth:tokentype:id_tokenBYOID_SubjectTokenTypePoint de terminaison d'échange de jetons Security Token Service https://sts.googleapis.com/v1/tokenBYOID_TokenUri
Configurer votre environnement de développement
Pour configurer votre environnement de développement avec le pilote JDBC pour BigQuery, procédez comme suit :
Téléchargez l'un des packages JDBC suivants :
- Uber JAR : Un fichier JAR avec toutes les dépendances incluses.
- Uber JAR ombragé. Un fichier JAR ombré avec toutes les dépendances incluses.
- Fichier JAR fin avec dépendances : Fichier ZIP incluant un fichier JAR fin et toutes les dépendances.
Ajoutez le fichier JAR téléchargé à votre classpath afin que le compilateur et l'environnement d'exécution Java puissent localiser les classes JDBC nécessaires. Pour savoir comment ajouter un fichier à votre chemin de classe, consultez Définir le chemin de classe.
Ajoutez la dépendance suivante à votre fichier de compilation :
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-bigquery-jdbc</artifactId> <version>0.0.1</version> <scope>system</scope> <systemPath>path/to/file/google-jdbc-jar-with-dependencies.jar</systemPath> </dependency>
Si vous utilisez un projet Gradle, ajoutez les éléments suivants à votre fichier de compilation :
dependencies { // ... other dependencies implementation files('path/to/file/google-jdbc-jar-with-dependencies.jar') }
Établir une connexion
Pour établir une connexion entre votre application Java et BigQuery avec le pilote JDBC pour BigQuery, procédez comme suit :
Identifiez votre chaîne de connexion pour le pilote JDBC pour BigQuery. Cette chaîne capture toutes les informations requises pour établir une connexion entre votre application Java et BigQuery. La chaîne de connexion se présente au format suivant :
jdbc:bigquery://HOST:PORT;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;AUTH_PROPS;OTHER_PROPS
Remplacez les éléments suivants :
HOST: adresse DNS ou IP du serveur.PORT: numéro de port TCP.PROJECT_ID: ID de votre projet BigQuery.AUTH_TYPE: nombre spécifiant le type d'authentification que vous avez utilisé. Choisissez l'une des options suivantes :0: pour l'authentification du compte de service (standard et fichier de clé)1: pour l'authentification des comptes utilisateur Google2: pour l'authentification par jeton d'actualisation ou d'accès pré-généré3: pour l'authentification avec les identifiants par défaut de l'application4: pour les autres méthodes d'authentification
AUTH_PROPS: informations d'authentification que vous avez notées lorsque vous vous êtes authentifié auprès de BigQuery, listées au formatproperty_1=value_1; property_2=value_2;...(par exemple,OAuthPvtKeyPath=path/to/file/secret.jsonsi vous vous êtes authentifié avec un fichier de clé de compte de service).OTHER_PROPS(facultatif) : propriétés de connexion supplémentaires pour le pilote JDBC, listées au formatproperty_1=value_1; property_2=value_2;.... Pour obtenir la liste complète des propriétés de connexion, consultez Propriétés de connexion.
Connectez votre application Java au pilote JDBC pour BigQuery avec la classe
DriverManagerouDataSource.Connectez-vous à la classe
DriverManager:import java.sql.Connection; import java.sql.DriverManager; private static Connection getJdbcConnectionDM(){ Connection connection = DriverManager.getConnection(CONNECTION_STRING); return connection; }
Remplacez
CONNECTION_STRINGpar la chaîne de connexion de l'étape précédente.Connectez-vous à la classe
DataSource:import com.google.cloud.bigquery.jdbc.DataSource; import java.sql.Connection; import java.sql.SQLException; private static public Connection getJdbcConnectionDS() throws SQLException { Connection connection = null; DataSource dataSource = new com.google.cloud.bigquery.jdbc.DataSource(); dataSource.setURL(CONNECTION_STRING); connection = dataSource.getConnection(); return connection; }
Remplacez
CONNECTION_STRINGpar la chaîne de connexion de l'étape précédente.La classe
DataSourcecomporte également des méthodes setter que vous pouvez utiliser pour définir les propriétés de connexion au lieu de les inclure dans la chaîne de connexion. En voici un exemple :private static Connection getConnection() throws SQLException { DataSource ds = new DataSource(); ds.setURL(jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;); ds.setAuthType(3); // Application Default Credentials ds.setProjectId("MyTestProject"); ds.setEnableHighThroughputAPI(true); ds.setLogLevel("6"); ds.setUseQueryCache(false); return ds.getConnection(); }
Propriétés de connexion
Les propriétés de connexion du pilote JDBC sont des paramètres de configuration que vous incluez dans la chaîne de connexion ou que vous transmettez via des méthodes setter lorsque vous établissez une connexion à une base de données. Les propriétés de connexion suivantes sont compatibles avec le pilote JDBC pour BigQuery.
| Propriété de connexion | Description | Valeur par défaut | Type de données | Obligatoire |
|---|---|---|---|---|
AdditionalProjects |
Projets auxquels le pilote peut accéder pour les requêtes et les opérations sur les métadonnées, en plus du projet principal défini par la propriété ProjectId.
|
N/A | Chaîne séparée par des virgules | Non |
AllowLargeResults |
Détermine si le pilote traite les résultats de requête supérieurs à 128 Mo lorsque la propriété QueryDialect est définie sur BIG_QUERY. Si la propriété QueryDialect est définie sur SQL, le pilote traite toujours les résultats de requête volumineux.
|
TRUE |
Booléen | Non |
BYOID_AudienceUri |
Propriété d'audience dans un fichier de configuration de compte externe. La propriété d'audience peut contenir le nom de ressource du pool d'identités de charge de travail ou du pool de travailleurs, ainsi que l'identifiant du fournisseur dans ce pool. | N/A | Chaîne | Uniquement lorsque OAuthType=4 |
BYOID_CredentialSource |
Récupération du jeton et informations sur l'environnement. | N/A | Chaîne | Uniquement lorsque OAuthType=4 |
BYOID_PoolUserProject |
Projet utilisateur lorsqu'un pool de personnel est utilisé pour l'authentification. | N/A | Chaîne | Uniquement lorsque OAuthType=4 est utilisé et que le pool d'employés est activé |
BYOID_SA_Impersonation_Uri |
URI pour l'usurpation d'identité du compte de service lorsqu'un pool d'identités de personnel est utilisé pour l'authentification. | N/A | Chaîne | Uniquement lorsque OAuthType=4 et le pool d'employés sont utilisés |
BYOID_SubjectTokenType |
Jeton Security Token Service basé sur la spécification d'échange de jetons.
Choisissez l'une des options suivantes :
|
urn:ietf:params:oauth:tokentype:id_token |
Chaîne | Uniquement lorsque OAuthType=4 |
BYOID_TokenUri |
Point de terminaison d'échange de jetons Security Token Service. | https://sts.googleapis.com/v1/token |
Chaîne | Non |
ConnectionPoolSize |
Taille du pool de connexions, si le regroupement de connexions est activé. | 10 |
Long | Non |
DefaultDataset |
Ensemble de données utilisé lorsqu'il n'est pas spécifié dans une requête. | N/A | Chaîne | Non |
EnableHighThroughputAPI |
Détermine si l'API Storage Read peut être utilisée. Les propriétés HighThroughputActivationRatio et HighThroughputMinTableSize doivent également être définies sur TRUE pour utiliser l'API Storage Read.
|
FALSE |
Booléen | Non |
EnableSession |
Détermine si la connexion démarre une session. Si la valeur est définie sur TRUE, l'ID de session est transmis à toutes les requêtes suivantes.
|
FALSE |
Booléen | Non |
EnableWriteAPI |
Détermine si l'API Storage Write peut être utilisée. Il doit être défini sur TRUE pour activer les insertions groupées.
|
FALSE |
Booléen | Non |
EndpointOverrides |
Points de terminaison personnalisés pour remplacer les éléments suivants :
|
N/A | Chaîne séparée par des virgules | Non |
FilterTablesOnDefaultDataset |
Détermine le champ d'application des métadonnées renvoyées par les méthodes DatabaseMetaData.getTables() et DatabaseMetaData.getColumns(). Lorsque la valeur est définie sur FALSE, aucun filtrage n'est effectué. La propriété DefaultDataset doit également être définie pour activer le filtrage.
|
FALSE |
Booléen | Non |
HighThroughputActivationRatio |
Seuil pour le nombre de pages dans une réponse à une requête. Lorsque ce nombre est dépassé et que les conditions EnableHighThroughputAPI et HighThroughputMinTableSize sont remplies, le pilote commence à utiliser l'API Storage Read.
|
2 |
Integer | Non |
HighThroughputMinTableSize |
Seuil pour le nombre de lignes dans une réponse à une requête. Lorsque ce nombre est dépassé et que les conditions EnableHighThroughputAPI et HighThroughputActivationRatio sont remplies, le pilote commence à utiliser l'API Storage Read.
|
100 |
Integer | Non |
JobCreationMode |
Détermine si les requêtes sont exécutées avec ou sans tâches. Une valeur 1 signifie que des jobs sont créés pour chaque requête, et une valeur 2 signifie que les requêtes peuvent être exécutées sans jobs.
|
2 |
Integer | Non |
JobTimeout |
Délai avant expiration de la tâche (en secondes) au-delà duquel la tâche est annulée sur le serveur. | 0 |
Long | Non |
KMSKeyName |
Nom de la clé KMS pour chiffrer les données. | N/A | Chaîne | Non |
Labels |
Libellés associés à la requête pour organiser et regrouper les tâches de requête. | N/A | Map<String, String> | Non |
LargeResultDataset |
Ensemble de données de destination pour les résultats de requête volumineux, uniquement lorsque la propriété LargeResultTable est définie. Lorsque vous définissez cette propriété, les écritures de données contournent le cache de résultats et déclenchent la facturation pour chaque requête, même si les résultats sont petits.
|
_google_jdbc |
Chaîne | Non |
LargeResultsDatasetExpirationTime |
Durée de vie de toutes les tables d'un grand ensemble de données de résultats, en millisecondes. Cette propriété est ignorée si un délai d'expiration par défaut est déjà défini pour l'ensemble de données. | 3600000 |
Long | Non |
LargeResultTable |
Table de destination pour les résultats de requête volumineux, uniquement lorsque la propriété LargeResultDataset est définie. Lorsque vous définissez cette propriété, les écritures de données contournent le cache de résultats et déclenchent la facturation pour chaque requête, même si les résultats sont petits.
|
temp_table... |
Chaîne | Non |
ListenerPoolSize |
Taille du pool d'écouteurs, si le regroupement de connexions est activé. | 10 |
Long | Non |
Location |
L'emplacement où les ensembles de données sont créés ou interrogés. BigQuery détermine automatiquement l'emplacement si cette propriété n'est pas définie. | N/A | Chaîne | Non |
LogLevel |
Niveau de détail enregistré par le package java.util.logging lors des interactions avec la base de données. La journalisation peut affecter les performances. N'activez-la donc que temporairement pour capturer un problème. Choisissez l'une des options suivantes :
|
0 |
Integer | Non |
LogPath |
Répertoire dans lequel les fichiers journaux sont écrits. | N/A | Chaîne | Non |
MaximumBytesBilled |
Limite du nombre d'octets facturés. Les requêtes dont le nombre d'octets facturés est supérieur à cette limite échouent sans entraîner de frais. | 0 |
Long | Non |
MaxResults |
Nombre maximal de résultats par page. | 10000 |
Long | Non |
MetaDataFetchThreadCount |
Nombre de threads utilisés pour les méthodes de métadonnées de base de données. | 32 |
Integer | Non |
OAuthAccessToken |
Jeton d'accès utilisé pour l'authentification des jetons d'accès pré-générés. | N/A | Chaîne | Uniquement lorsque OAUTH_TYPE=2 |
OAuthClientId |
ID client pour l'authentification par jeton d'actualisation pré-généré et l'authentification par compte utilisateur. | N/A | Chaîne | Uniquement lorsque OAUTH_TYPE=1 ou OAUTH_TYPE=2 |
OAuthClientSecret |
Code secret du client pour l'authentification par jeton d'actualisation pré-généré et l'authentification du compte utilisateur. | N/A | Chaîne | Uniquement lorsque OAUTH_TYPE=1 ou OAUTH_TYPE=2 |
OAuthP12Password |
Mot de passe du fichier de clé PKCS12. | notasecret |
Chaîne | Non |
OAuthPvtKey |
Clé du compte de service lorsque vous utilisez l'authentification par compte de service. Cette valeur peut être un objet de fichier de clé JSON brut ou un chemin d'accès au fichier de clé JSON. | N/A | Chaîne |
Uniquement lorsque OAUTH_TYPE=0 et la valeur OAuthPvtKeyPath ne sont pas définis
|
OAuthPvtKeyPath |
Chemin d'accès à la clé du compte de service lors de l'utilisation de l'authentification par compte de service. | N/A | Chaîne |
Uniquement lorsque OAUTH_TYPE=0 et les valeurs OAuthPvtKey et OAuthServiceAcctEmail ne sont pas définies
|
OAuthRefreshToken |
Jeton d'actualisation pour l'authentification par jeton d'actualisation pré-généré. | N/A | Chaîne |
Uniquement lorsque OAUTH_TYPE=2
|
OAuthServiceAcctEmail |
Adresse e-mail du compte de service lorsque vous utilisez l'authentification par compte de service. | N/A | Chaîne |
Uniquement lorsque OAUTH_TYPE=0 et la valeur OAuthPvtKeyPath ne sont pas définis
|
OAuthType |
Type d'authentification. Choisissez l'une des options suivantes :
|
-1 |
Integer | Oui |
PartnerToken |
Jeton utilisé par les partenaires Google Cloud pour suivre l'utilisation du pilote. | N/A | Chaîne | Non |
ProjectId |
ID de projet par défaut pour le pilote. Ce projet permet d'exécuter des requêtes et est facturé pour l'utilisation des ressources. S'il n'est pas défini, le pilote déduit un ID de projet. | N/A | Chaîne | Non, mais fortement recommandé |
ProxyHost |
Nom d'hôte ou adresse IP d'un serveur proxy par lequel la connexion JDBC est acheminée. | N/A | Chaîne | Non |
ProxyPort |
Numéro de port sur lequel le serveur proxy écoute les connexions. | N/A | Chaîne | Non |
ProxyPwd |
Mot de passe à utiliser pour l'authentification lors de la connexion via un serveur proxy qui l'exige. | N/A | Chaîne | Non |
ProxyUid |
Nom d'utilisateur pour l'authentification lors de la connexion via un serveur proxy qui l'exige. | N/A | Chaîne | Non |
QueryDialect |
Dialecte SQL pour l'exécution des requêtes. Utilisez SQL pour GoogleSQL (fortement recommandé) et BIG_QUERY pour l'ancien SQL.
|
SQL |
Chaîne | Non |
QueryProperties |
Propriétés de connexion REST qui personnalisent le comportement des requêtes. | N/A | Map<String, String> | Non |
RequestGoogleDriveScope |
Ajoute un champ Drive en lecture seule à la connexion lorsqu'il est défini sur 1.
|
0 |
Integer | Non |
RetryInitialDelay |
Définit le délai (en secondes) avant la première nouvelle tentative. | 0 |
Long | Non |
RetryMaxDelay |
Définit la limite maximale (en secondes) du délai de nouvelle tentative. | 0 |
Long | Non |
ServiceAccountImpersonationChain |
Liste d'adresses e-mail de comptes de service séparées par une virgule dans la chaîne d'usurpation d'identité. | N/A | Chaîne | Non |
ServiceAccountImpersonationEmail |
Adresse e-mail du compte de service dont l'identité doit être empruntée. | N/A | Chaîne | Non |
ServiceAccountImpersonationScopes |
Liste de champs d'application OAuth2 séparés par une virgule à utiliser avec le compte usurpé. | https://www.googleapis.com/auth/bigquery |
Chaîne | Non |
ServiceAccountImpersonationTokenLifetime |
Durée de vie du jeton du compte usurpé (en secondes). | 3600 |
Integer | Non |
SSLTrustStore |
Chemin d'accès complet au Java TrustStore contenant les certificats d'autorité de certification (CA) approuvés. Le pilote utilise ce truststore pour valider l'identité du serveur lors du handshake SSL/TLS. | N/A | Chaîne | Non |
SSLTrustStorePwd |
Mot de passe du truststore Java spécifié dans la propriété SSLTrustStore.
|
N/A | Chaîne | Uniquement si le truststore Java est protégé par un mot de passe |
SWA_ActivationRowCount |
Seuil de executeBatch insert lignes au-delà duquel le connecteur passe à l'API Storage Write.
|
3 |
Integer | Non |
SWA_AppendRowCount |
Taille du flux d'écriture. | 1000 |
Integer | Non |
Timeout |
Durée, en secondes, pendant laquelle le connecteur effectue une nouvelle tentative d'appel d'API ayant échoué avant l'expiration du délai. | 0 |
Long | Non |
UniverseDomain |
Domaine de premier niveau associé aux ressources Google Cloud de votre organisation. | googleapis.com |
Chaîne | Non |
UnsupportedHTAPIFallback |
Détermine si le connecteur revient à l'API REST (lorsqu'il est défini sur TRUE) ou renvoie une erreur (lorsqu'il est défini sur FALSE).
|
TRUE |
Booléen | Non |
UseQueryCache |
Active la mise en cache des requêtes. | TRUE |
Booléen | Non |
Exécuter des requêtes avec le pilote
Maintenant que votre application Java est connectée à BigQuery via le pilote JDBC, vous pouvez exécuter des requêtes dans votre environnement de développement via la procédure JDBC standard. Tous les quotas et limites BigQuery s'appliquent.
Mappage des types de données
Lorsque vous exécutez des requêtes via le pilote JDBC pour BigQuery, le mappage des types de données suivant se produit :
| Type GoogleSQL | Type Java |
|---|---|
ARRAY |
Array |
BIGNUMERIC |
BigDecimal |
BOOL |
Boolean |
BYTES |
byte[] |
DATE |
Date |
DATETIME |
String |
FLOAT64 |
Double |
GEOGRAPHY |
String |
INT64 |
Long |
INTERVAL |
String |
JSON |
String |
NUMERIC |
BigDecimal |
STRING |
String |
STRUCT |
Struct |
TIME |
Time |
TIMESTAMP |
Timestamp |
Exemples
Les sections suivantes fournissent des exemples d'utilisation des fonctionnalités BigQuery via le pilote JDBC pour BigQuery.
Paramètres positionnels
L'exemple suivant exécute une requête avec un paramètre positionnel :
PreparedStatement preparedStatement = connection.prepareStatement( "SELECT * FROM MyTestTable where testColumn = ?"); preparedStatement.setString(1, "string2"); ResultSet resultSet = statement.executeQuery(selectQuery);
Enregistrements imbriqués et répétés
L'exemple suivant interroge l'enregistrement de base des données Struct :
ResultSet resultSet = statement.executeQuery("SELECT STRUCT(\"Adam\" as name, 5 as age)"); resultSet.next(); Struct obj = (Struct) resultSet.getObject(1); System.out.println(obj.toString());
Le pilote renvoie l'enregistrement de base sous la forme d'un objet struct ou d'une représentation de chaîne d'un objet JSON. Le résultat ressemble à ce qui suit :
{
"v": {
"f": [
{
"v": "Adam"
},
{
"v": "5"
}
]
}
}L'exemple suivant interroge les sous-composants d'un objet Struct :
ResultSet resultSet = statement.executeQuery("SELECT STRUCT(\"Adam\" as name, 5 as age)"); resultSet.next(); Struct structObject = (Struct) resultSet.getObject(1); Object[] structComponents = structObject.getAttributes(); for (Object component : structComponents){ System.out.println(component.toString()); }
L'exemple suivant interroge un tableau standard de données répétées, puis vérifie le résultat :
// Execute Query ResultSet resultSet = statement.executeQuery("SELECT [1,2,3]"); resultSet.next(); Object[] arrayObject = (Object[]) resultSet.getArray(1).getArray(); // Verify Result int count =0; for (; count < arrayObject.length; count++) { System.out.println(arrayObject[count]); }
L'exemple suivant interroge un tableau Struct de données répétées, puis vérifie le résultat :
// Execute Query ResultSet resultSet = statement.executeQuery("SELECT " + "[STRUCT(\"Adam\" as name, 12 as age), " + "STRUCT(\"Lily\" as name, 17 as age)]"); Struct[] arrayObject = (Struct[]) resultSet.getArray(1).getArray(); // Verify Result for (int count =0; count < arrayObject.length; count++) { System.out.println(arrayObject[count]); }
Insertion groupée
L'exemple suivant effectue une opération d'insertion groupée avec la méthode executeBatch.
Connection conn = DriverManager.getConnection(connectionUrl); PreparedStatement statement = null; Statement st = conn.createStatement(); final String insertQuery = String.format( "INSERT INTO `%s.%s.%s` " + " (StringField, IntegerField, BooleanField) VALUES(?, ?, ?);", DEFAULT_CATALOG, DATASET, TABLE_NAME); statement = conn.prepareStatement(insertQuery1); for (int i=0; i<2000; ++i) { statement.setString(1, i+"StringField"); statement.setInt(2, i); statement.setBoolean(3, true); statement.addBatch(); } statement.executeBatch();
Tarifs
Vous pouvez télécharger le pilote JDBC pour BigQuery sans frais. Aucune licence supplémentaire n'est requise pour utiliser les pilotes. Toutefois, lorsque vous utilisez le pilote, les tarifs BigQuery standards s'appliquent.
Étapes suivantes
- En savoir plus sur le pilote ODBC Simba pour BigQuery
- Découvrez d'autres outils pour les développeurs BigQuery.