Utiliser le pilote ODBC pour BigQuery

Le pilote Open Database Connectivity (ODBC) pour BigQuery connecte vos applications non 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 Java à BigQuery, utilisez le pilote JDBC pour BigQuery.

Le pilote ODBC pour BigQuery est disponible sous la licence Apache 2.0.

Avant de commencer

  1. Assurez-vous de bien maîtriser les pilotes ODBC et les gestionnaires de pilotes.

  2. Assurez-vous que votre système d'exploitation répond aux exigences suivantes :

    Système d'exploitation Architectures compatibles Version minimale et dépendances
    Windows 32 bits (x86), 64 bits (x64) Version : Windows 10, Windows Server 2016 ou version ultérieure

    Dépendance : Microsoft Visual C++ Redistributable pour Visual Studio 2019 ou 2022
    macOS 64 bits (x86_64), ARM64 (Apple Silicon) Version : macOS 12 (Monterey) ou version ultérieure

    Dépendance : un gestionnaire de pilotes ODBC (par exemple, unixODBC). Assurez-vous d'ajouter le répertoire d'installation à votre DYLD_LIBRARY_PATH.
    Linux 64 bits (x86_64) Version : toute distribution avec glibc 2.27 ou version ultérieure (par exemple, Ubuntu 20.04 LTS+, Debian 11+)

    Dépendance : un gestionnaire de pilotes ODBC (par exemple, unixODBC). Assurez-vous d'ajouter le répertoire d'installation à votre LD_LIBRARY_PATH.
  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 ODBC 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 Clé de compte de service (objet JSON) my-sa-key KeyFilePath
    Fédération d'identité de charge de travail ou fédération des identités des employés Propriété "audience" du fichier de configuration du compte externe //iam.googleapis.com/locations/global/... BYOID_AudienceUrl
    Fichier d'informations sur l'environnement et récupération du jeton {"file":"/path/to/file"} BYOID_CredentialSource
    Projet utilisateur (uniquement pour le pool d'employés) my_project BYOID_PoolUserProject
    Type de jeton STS id_token BYOID_SubjectTokenType
    Point de terminaison d'échange de jetons STS https://sts.googleapis.com/v1/token BYOID_TokenUrl
    Identifiants par défaut de l'application Aucun N/A N/A

Installer et configurer le pilote ODBC

Vous pouvez installer et configurer le pilote ODBC pour BigQuery à l'aide d'un système d'exploitation Windows ou non.

Windows

  1. Installez le pilote qui correspond à l'architecture de votre application :

  2. Créez un nom de source de données (DSN) en procédant comme suit :

    1. Dans le menu Démarrer de Windows, accédez à Sources de données ODBC, puis sélectionnez la version qui a la même architecture que votre application cliente.
    2. Sur la page Administrateur de sources de données ODBC, cliquez sur l'onglet Pilotes.
    3. Dans la liste des pilotes ODBC installés, recherchez Pilote ODBC pour BigQuery.
    4. Sélectionnez l'onglet DSN système pour créer un DSN pour tous les utilisateurs ou l'onglet DSN utilisateur pour créer un DSN pour l'utilisateur actuel. Les DSN système sont généralement recommandés, car certaines applications chargent les données à l'aide de différents comptes utilisateur et peuvent ne pas détecter les autres DSN utilisateur.
    5. Cliquez sur Ajouter.
    6. Dans la boîte de dialogue Créer une source de données, sélectionnez Pilote ODBC pour BigQuery, puis cliquez sur Terminer. La boîte de dialogue Configuration du DSN du pilote ODBC pour BigQuery s'ouvre.
    7. Dans le champ Nom de la source de données, saisissez le nom de votre DSN.
    8. Ajoutez des propriétés de connexion. Pour obtenir la liste complète des propriétés, consultez Propriétés de la connexion.

Non-Windows

  1. Installez le pilote correspondant à votre système d'exploitation :

  2. Extrayez le contenu du fichier ZIP ou TAR téléchargé.

  3. Déplacez le contenu du fichier ZIP ou TAR vers le répertoire dans lequel vous souhaitez installer le connecteur. Le chemin d'accès à l'objet partagé du pilote ODBC pour BigQuery est INSTALL_DIR/lib/libgoogle_cloud_odbc_bq_driver.so, où INSTALL_DIR correspond à votre répertoire d'installation.

  4. Mettez à jour vos fichiers .ini pour refléter le nouveau chemin d'accès au connecteur.

    L'exemple suivant met à jour les fichiers .ini dans un système Linux :

    unzip linux_odbc-driver.VERSION.zip -d linux_odbc-driver.VERSION/
    cd ./linux_odbc-driver.VERSION
    export INSTALL_DIR=$(pwd)
    export ODBCINI=$INSTALL_DIR/odbc.ini
    export ODBCINSTINI=$INSTALL_DIR/odbcinst.ini
    export GOOGLEBIGQUERYODBCINI=$INSTALL_DIR/googlebigqueryodbc.ini

    Remplacez VERSION par la version du pilote.

Établir une connexion

Pour établir une connexion entre votre application et BigQuery avec le pilote ODBC pour BigQuery, identifiez votre chaîne de connexion. Vous pouvez ignorer cette étape si vous avez déjà configuré les propriétés de connexion via votre DSN.

La chaîne de connexion se présente au format suivant :

Driver=ODBC Driver for BigQuery;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;AUTH_PROPS;OTHER_PROPS

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet BigQuery.
  • AUTH_TYPE : nombre spécifiant le type d'authentification que vous avez utilisé. Sélectionnez l'une des options suivantes :
    • 0 : pour l'authentification du compte de service
    • 3 : pour l'authentification avec les identifiants par défaut de l'application
    • 4 : pour l'authentification par fédération d'identité de charge de travail ou fédération des identités des employés
  • 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 KeyFilePath=my-sa-key si vous vous êtes authentifié avec un compte de service.
  • OTHER_PROPS (facultatif) : propriétés de connexion supplémentaires pour le pilote ODBC, 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.

Propriétés de connexion

Les propriétés de connexion du pilote ODBC sont des paramètres de configuration que vous incluez dans la chaîne de connexion lorsque vous établissez une connexion à une base de données. Le pilote ODBC pour BigQuery est compatible avec les propriétés de connexion suivantes.

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
AllowHtapiForLargeResults Détermine si le pilote peut utiliser l'API BigQuery Storage Read. 0 Booléen 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. 0 Booléen Non
BYOID_AudienceUrl Contient le nom de ressource du pool d'identités de charge de travail ou du pool de personnel, ainsi que l'identifiant du fournisseur dans ce pool. N/A Chaîne Uniquement lorsque OAuthMechanism=4
BYOID_CredentialSource Définit les informations nécessaires pour récupérer le jeton lui-même, ainsi que certaines informations sur l'environnement. N/A Chaîne Uniquement lorsque OAuthMechanism=4
BYOID_PoolUserProject Définissez le projet lorsqu'il s'agit d'un pool d'identité de personnel et non d'un pool d'Workload Identity. N/A Chaîne Uniquement lorsque OAuthMechanism=4 est utilisé et qu'un pool d'employés est utilisé
BYOID_SubjectTokenType Définit le type de jeton STS en fonction de la spécification d'échange de jetons OAuth 2.0. Les valeurs attendues incluent :
  • 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
N/A Chaîne Uniquement lorsque OAuthMechanism=4
BYOID_TokenUrl Définit le point de terminaison d'échange de jetons STS. https://sts.googleapis.com/v1/token Chaîne Non
DefaultDataset Il s'agit d'un ensemble de données désigné dans un projet auquel le pilote fait automatiquement référence lorsque vous exécutez des requêtes sans spécifier explicitement un ensemble de données. N/A Chaîne Non
FilterTablesOnDefaultDataset Détermine le champ d'application des méthodes de métadonnées de table ou de colonne renvoyées. Si la valeur est "false", aucun filtrage n'est effectué. Vous devez également définir la propriété DefaultDataset pour activer le filtrage. FALSE Booléen Non
EnableSession Détermine si une connexion démarre une session. Lorsqu'elle est activée, la première requête exécutée par cette connexion démarre une session, et le pilote transmet l'ID de session à toutes les requêtes suivantes. 0 Booléen Non
JobCreationMode Vous permet d'activer le chemin de requête à faible latence. Choisissez l'une des options suivantes :
  • 1 : le pilote crée des jobs pour chaque requête (JOB_CREATION_REQUIRED).
  • 2 : le pilote exécute les requêtes sans tâches (JOB_CREATION_OPTIONAL).
2 Integer Non
KeyFilePath 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 OAuthMechanism=0
KMSKeyName Spécifie le nom de la clé KMS à utiliser pour chiffrer et déchiffrer les données. N/A Chaîne Non
LargeResultsDataSetId Spécifie l'ensemble de données de destination pour stocker les résultats de requête volumineux. N/A Chaîne Non
LargeResultsDatasetExpirationTime Spécifie la durée de vie de toutes les tables de l'ensemble de données de résultats volumineux, en millisecondes. 3600000 Long Non
Location Spécifie l'emplacement où le pilote crée ou interroge les ensembles de données. N/A Chaîne Non
LogLevel Limite le niveau de détail des journaux du pilote lors des interactions. Choisissez l'une des options suivantes :
  • 0 : OFF
  • 1 : ERROR
  • 2 : WARNING
  • 3 : INFO
0 Integer Non
LogPath Spécifie le répertoire dans lequel le pilote écrit les fichiers journaux. N/A Chaîne Non
LogFileCount Spécifie le nombre maximal de fichiers journaux à conserver. 0 Integer Non
LogFileSize Spécifie la taille maximale de chaque fichier journal en octets. 0 Long Non
MaxResults Spécifie le nombre de résultats par page dans le résultat de l'API BigQuery. 10000 Long Non
MaxThreads Définit le nombre maximal de threads que le connecteur peut utiliser pour le traitement simultané dans un pool de threads. Pour configurer cette propriété en tant que paramètre à l'échelle du connecteur pour les connecteurs non Windows, spécifiez-la dans le fichier googlebigqueryodbc.ini. 8 Integer Non
OAuthMechanism Type d'authentification. Choisissez l'une des options suivantes :
  • 0 : Authentification par compte de service
  • 3 : authentification avec les identifiants par défaut de l'application
  • 4 : authentification par fédération d'identité de charge de travail ou fédération des identités des employés
N/A Integer Oui
ProjectId ID du projet par défaut pour le pilote. Le pilote utilise ce projet pour exécuter les requêtes et le facture pour l'utilisation des ressources. N/A Chaîne Oui
ProxyHost Nom d'hôte ou adresse IP d'un serveur proxy. N/A Chaîne Non
ProxyPort Numéro de port sur lequel le serveur proxy écoute. N/A Chaîne Non
ProxyPwd Mot de passe pour l'authentification lors de la connexion via un serveur proxy. N/A Chaîne Non
ProxyUid Nom d'utilisateur pour l'authentification lors de la connexion via un serveur proxy. N/A Chaîne Non
PrivateServiceConnectUris Points de terminaison personnalisés pour remplacer les points de terminaison par défaut. Exemples :
  • BIGQUERY=https://bigquery.us-east4.rep.googleapis.com/
  • READ_API=bigquerystorage.us-east4.rep.googleapis.com
  • OAUTH2=oauth2.us-east4.rep.googleapis.com
N/A Chaîne séparée par des virgules Non
QueryDialect Spécifie le dialecte de requête à utiliser. Utilisez SQL pour GoogleSQL (fortement recommandé) et BIG_QUERY pour l'ancien SQL. SQL Chaîne Non
QueryProperties Configure les propriétés qui peuvent modifier le comportement de la requête. N/A Map<String, String> Non
UniverseDomain Spécifie le domaine de l'univers pour votre organisation. googleapis.com Chaîne Non
UseQueryCache Active la fonctionnalité de mise en cache des requêtes dans BigQuery. true Booléen Non

Mappage des types de données

Lorsque vous exécutez des requêtes via le pilote ODBC pour BigQuery, le mappage des types de données suivant se produit :

Type GoogleSQL Type SQL ODBC
INT64SQL_BIGINT
BOOLSQL_BIT
DATESQL_TYPE_DATE
FLOAT64SQL_DOUBLE
TIMESQL_TYPE_TIME
TIMESTAMPSQL_TYPE_TIMESTAMP
DATETIMESQL_TYPE_TIMESTAMP
BYTESSQL_VARBINARY
STRINGSQL_VARCHAR
ARRAYSQL_VARCHAR
STRUCTSQL_VARCHAR
INTERVALSQL_VARCHAR
JSONSQL_VARCHAR
GEOGRAPHYSQL_VARCHAR
RANGESQL_VARCHAR
NUMERICSQL_NUMERIC
BIGNUMERICSQL_NUMERIC

Exemples

Les exemples suivants montrent comment utiliser des requêtes paramétrées et des scripts à plusieurs instructions avec le pilote ODBC.

Requêtes paramétrées

// 1. Prepare statement
std::string insert_stmt = "INSERT INTO MyTable VALUES (?, ?, ?)";
status = SQLPrepare(hstmt, (SQLCHAR*)insert_stmt.c_str(), SQL_NTS);

// 2. Bind parameters
std::string str_val = "example_string";
long long int_val = 12345;
double float_val = 1.2345;

// Bind string field
status = SQLBindParameter(
    hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0,
    (SQLPOINTER)str_val.c_str(), str_val.size(), NULL);

// Bind integer field
status = SQLBindParameter(
    hstmt, 2, SQL_PARAM_INPUT, SQL_C_UBIGINT, SQL_BIGINT, 0, 0,
    &int_val, 0, NULL);

// Bind float field
status = SQLBindParameter(
    hstmt, 3, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0,
    &float_val, 0, NULL);

// 3. Execute statement
status = SQLExecute(hstmt);

Scripts à plusieurs instructions

// 1. Prepare and execute the multi-statement script
std::string query =
    "CREATE OR REPLACE TABLE MyTable (StringField STRING, IntegerField INTEGER); "
    "INSERT INTO MyTable VALUES ('example', 123); "
    "SELECT * FROM MyTable;";

status = SQLExecDirect(hstmt, (SQLCHAR*)query.c_str(), SQL_NTS);

// 2. Process results for each statement using SQLMoreResults
do {
    SQLSMALLINT num_cols;
    status = SQLNumResultCols(hstmt, &num_cols);

    if (num_cols > 0) {
        // This is a result-returning statement (e.g., SELECT)
        while (SQLFetch(hstmt) == SQL_SUCCESS) {
            // Process rows...
        }
    } else {
        // This is a non-result statement (e.g., CREATE, INSERT)
        SQLLEN row_count;
        SQLRowCount(hstmt, &row_count);
        // Process affected rows...
    }
} while (SQLMoreResults(hstmt) == SQL_SUCCESS);

Tarifs

Vous pouvez télécharger sans frais le pilote ODBC pour BigQuery. Toutefois, lorsque vous utilisez le pilote, les tarifs standards d'analyse BigQuery s'appliquent.

Étapes suivantes