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 INTERVAL n'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

  1. Assurez-vous de bien connaître les pilotes JDBC, Apache Maven et le package java.sql.
  2. 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.
  3. 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.com OAuthServiceAcctEmail
    Clé de compte de service (objet JSON) my-sa-key OAuthPvtKey
    Fichier de clé du compte de service Fichier de clé du compte de service (chemin d'accès complet) path/to/file/secret.json OAuthPvtKeyPath
    Compte utilisateur Google ID client 123-abc.apps.googleusercontent.com OAuthClientId
    Code secret du client _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uV OAuthClientSecret
    Jeton d'accès pré-généré Jeton d'accès ya29.a0AfH6SMCiH1L-x_yZ OAuthAccessToken
    Jeton d'actualisation pré-généré Jeton d'actualisation 1/fFAGRNJru1FTz70BzhT3Zg OAuthRefreshToken
    ID client 123-abc.apps.googleusercontent.com OAuthClientId
    Code secret du client _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uV OAuthClientSecret
    Identifiants 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.json OAuthPvtKey
    Objet de configuration du compte externe Objet de configuration du compte external_account_configuration_object OAuthPvtKey
    Autre Propriété "audience" du fichier de configuration du compte externe //iam.googleapis.com/projects/my-project/locations/US-EAST1/workloadIdentityPools/my-pool-/providers/my-provider BYOID_AudienceUri
    Récupération de jetons et fichier d'informations sur l'environnement {\"file\":\"/path/to/file\"} BYOID_CredentialSource
    Projet utilisateur (uniquement si vous utilisez un pool d'employés) my_project BYOID_PoolUserProject
    URI pour l'emprunt d'identité d'un compte de service (uniquement si vous utilisez un pool de personnel) my-sa BYOID_SA_Impersonation_Uri
    Jeton Security Token Service basé sur la spécification d'échange de jetons urn:ietf:params:oauth:tokentype:id_token BYOID_SubjectTokenType
    Point de terminaison d'échange de jetons Security Token Service https://sts.googleapis.com/v1/token BYOID_TokenUri

Configurer votre environnement de développement

Pour configurer votre environnement de développement avec le pilote JDBC pour BigQuery, procédez comme suit :

  1. Téléchargez l'un des packages JDBC suivants :

  2. 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.

  3. 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>
  4. 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 :

  1. 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 Google
      • 2 : 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'application
      • 4 : 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 format property_1=value_1; property_2=value_2;... (par exemple, OAuthPvtKeyPath=path/to/file/secret.json si 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 format property_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.
  2. Connectez votre application Java au pilote JDBC pour BigQuery avec la classe DriverManager ou DataSource.

    • 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_STRING par 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_STRING par la chaîne de connexion de l'étape précédente.

      La classe DataSource comporte é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:token-type:jwt
  • urn:ietf:params:oauth:token-type:id_token
  • urn:ietf:params:oauth:token-type:saml2
  • urn:ietf:params:aws:token-type:aws4_request
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 :
  • BIGQUERY=https://bigquery.googleapis.com
  • READ_API=https://bigquerystorage.googleapis.com
  • OAUTH2=https://oauth2.googleapis.com
  • STS=https://sts.googleapis.com
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 : niveau OFF
  • 1 : niveau SEVERE
  • 2 : niveau WARNING
  • 3 : niveau INFO
  • 4 : niveau CONFIG
  • 5 : niveau FINE
  • 6 : niveau FINER
  • 7 : niveau FINEST
  • 8 : niveau ALL
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 :
  • 0 : authentification du compte de service
  • 1 : authentification du compte utilisateur
  • 2 : authentification par jeton d'actualisation ou d'accès pré-généré
  • 3 : authentification avec les identifiants par défaut de l'application
  • 4 : autres méthodes d'authentification
-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