Usar o driver ODBC para BigQuery

O driver Open Database Connectivity (ODBC) para BigQuery conecta seus aplicativos não Java ao BigQuery, permitindo que você use os recursos do BigQuery com suas ferramentas e infraestrutura preferidas. Para conectar aplicativos Java ao BigQuery, use o driver JDBC para BigQuery.

O driver ODBC para BigQuery está disponível sob a licença Apache 2.0.

Antes de começar

  1. Familiarize-se com os drivers ODBC e os gerenciadores de drivers.

  2. Verifique se o sistema operacional atende aos seguintes requisitos:

    Sistema operacional Arquiteturas compatíveis Versão mínima e dependências
    Windows 32 bits (x86), 64 bits (x64) Versão: Windows 10, Windows Server 2016 ou posterior

    Dependência: Microsoft Visual C++ Redistribuível para Visual Studio 2019 ou 2022
    macOS 64 bits (x86_64), ARM64 (Apple Silicon) Versão: macOS 12 (Monterey) ou mais recente

    Dependência: um gerenciador de drivers ODBC (por exemplo, unixODBC). Adicione o diretório de instalação ao seu DYLD_LIBRARY_PATH.
    Linux 64 bits (x86_64) Versão: qualquer distribuição com glibc 2.27 ou mais recente (por exemplo, Ubuntu 20.04 LTS+, Debian 11+)

    Dependência: um gerenciador de drivers ODBC (por exemplo, unixODBC). Adicione o diretório de instalação ao seu LD_LIBRARY_PATH.
  3. Autentique-se no BigQuery e anote as seguintes informações, que serão usadas mais tarde quando você estabelecer uma conexão com o driver ODBC para BigQuery. Você só precisa anotar as informações correspondentes ao método de autenticação que você usa.

    Método de autenticação Informações de autenticação Exemplo Propriedade de conexão (para definir mais tarde)
    Conta de serviço padrão Chave da conta de serviço (objeto JSON) my-sa-key KeyFilePath
    Federação de identidade da carga de trabalho ou federação de identidade de colaboradores Propriedade de público-alvo do arquivo de configuração da conta externa //iam.googleapis.com/locations/global/... BYOID_AudienceUrl
    Recuperação de token e arquivo de informações ambientais {"file":"/path/to/file"} BYOID_CredentialSource
    Projeto do usuário (somente para pool de força de trabalho) my_project BYOID_PoolUserProject
    Tipo de token STS id_token BYOID_SubjectTokenType
    Endpoint de troca de token do STS https://sts.googleapis.com/v1/token BYOID_TokenUrl
    Application Default Credentials Nenhum N/A N/A

Instalar e configurar o driver ODBC

É possível instalar e configurar o driver ODBC para BigQuery usando um sistema operacional Windows ou não Windows.

Windows

  1. Instale o driver que corresponde à arquitetura do seu aplicativo:

  2. Crie um nome da fonte de dados (DSN) fazendo o seguinte:

    1. No menu Iniciar do Windows, acesse Fontes de dados ODBC e selecione a versão com a mesma arquitetura (32 ou 64 bits) do seu aplicativo cliente.
    2. Na página Administrador de fonte de dados ODBC, clique na guia Drivers.
    3. Na lista de drivers ODBC instalados, localize Driver ODBC para BigQuery.
    4. Selecione a guia DSN do sistema para criar um DSN para todos os usuários ou a guia DSN do usuário para criar um DSN para o usuário atual. Os DSNs do sistema são geralmente recomendados porque alguns aplicativos carregam dados usando contas de usuário diferentes e podem não detectar outros DSNs de usuário.
    5. Clique em Adicionar.
    6. Na caixa de diálogo Criar nova fonte de dados, selecione Driver ODBC para BigQuery e clique em Concluir. A caixa de diálogo Configuração de DSN do driver ODBC para BigQuery é aberta.
    7. No campo Nome da fonte de dados, insira um nome para o DSN.
    8. Adicione propriedades de conexão. Para uma lista completa de propriedades, consulte Propriedades de conexão.

Não Windows

  1. Instale o driver correspondente ao seu sistema operacional:

  2. Extraia o conteúdo do arquivo ZIP ou TAR baixado.

  3. Mova o conteúdo do arquivo ZIP ou TAR para o diretório em que você quer instalar o conector. O caminho do objeto compartilhado do driver ODBC para BigQuery é INSTALL_DIR/lib/libgoogle_cloud_odbc_bq_driver.so, em que INSTALL_DIR é o diretório de instalação.

  4. Atualize os arquivos .ini para refletir o novo caminho do conector.

    O exemplo a seguir atualiza os arquivos .ini em um sistema 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

    Substitua VERSION pela versão do driver.

Estabelecer uma conexão

Para estabelecer uma conexão entre seu aplicativo e o BigQuery com o driver ODBC para BigQuery, identifique sua string de conexão. Você pode pular esta etapa se já tiver configurado as propriedades de conexão pelo DSN.

A string de conexão tem o seguinte formato:

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

Substitua:

  • PROJECT_ID: o ID do seu projeto do BigQuery.
  • AUTH_TYPE: um número que especifica o tipo de autenticação usado. Selecione uma destas opções:
    • 0: para autenticação de conta de serviço
    • 3: para autenticação de Application Default Credentials
    • 4: para autenticação da federação de identidade da carga de trabalho ou da federação de identidade de colaboradores
  • AUTH_PROPS: as informações de autenticação que você anotou ao autenticar no BigQuery, listadas no formato property_1=value_1; property_2=value_2;.... Por exemplo, KeyFilePath=my-sa-key, se você fez a autenticação com uma conta de serviço.
  • OTHER_PROPS (opcional): propriedades de conexão adicionais para o driver ODBC, listadas no formato property_1=value_1; property_2=value_2;.... Para uma lista completa de propriedades de conexão, consulte Propriedades de conexão.

Propriedades da conexão

As propriedades de conexão do driver ODBC são parâmetros de configuração incluídos na string de conexão ao estabelecer uma conexão com um banco de dados. O driver ODBC para BigQuery é compatível com as seguintes propriedades de conexão.

Propriedade de conexão Descrição Valor padrão Tipo de dado Obrigatório
AdditionalProjects Projetos que o driver pode acessar para consultas e operações de metadados, além do projeto principal definido pela propriedade ProjectId. N/A String separada por vírgulas Não
AllowHtapiForLargeResults Determina se o driver pode usar a API BigQuery Storage Read. 0 Booleano Não
AllowLargeResults Determina se o driver processa resultados de consultas maiores que 128 MB quando a propriedade QueryDialect está definida como BIG_QUERY. Se a propriedade QueryDialect estiver definida como SQL, o driver sempre processará resultados de consultas grandes. 0 Booleano Não
BYOID_AudienceUrl Contém o nome do recurso do pool de identidades da carga de trabalho ou do pool da força de trabalho e o identificador do provedor nesse pool. N/A String Somente quando OAuthMechanism=4
BYOID_CredentialSource Define as informações necessárias para recuperar o token e algumas informações ambientais. N/A String Somente quando OAuthMechanism=4
BYOID_PoolUserProject Defina o projeto quando ele for um pool de força de trabalho e não um pool de Identidade da carga de trabalho. N/A String Somente quando OAuthMechanism=4 e usando um pool de funcionários
BYOID_SubjectTokenType Define o tipo de token do STS com base na especificação de troca de token do Oauth2.0. Os valores esperados incluem:
  • 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 String Somente quando OAuthMechanism=4
BYOID_TokenUrl Define o endpoint de troca de token do STS. https://sts.googleapis.com/v1/token String Não
DefaultDataset Serve como um conjunto de dados designado em um projeto que o driver referencia automaticamente quando você executa consultas sem especificar explicitamente um conjunto de dados. N/A String Não
FilterTablesOnDefaultDataset Determina o escopo dos metadados que os métodos de metadados de tabela ou coluna retornam. Quando é "false", não há filtragem. Também é necessário definir a propriedade DefaultDataset para ativar a filtragem. FALSE Booleano Não
EnableSession Determina se uma conexão inicia uma sessão. Quando ativada, a primeira consulta executada por essa conexão inicia uma sessão, e o driver transmite o ID da sessão para todas as consultas subsequentes. 0 Booleano Não
JobCreationMode Permite ativar o caminho de consulta de baixa latência. Escolha uma das opções a seguir:
  • 1: o driver cria jobs para cada consulta (JOB_CREATION_REQUIRED)
  • 2: o driver executa consultas sem jobs (JOB_CREATION_OPTIONAL)
2 Número inteiro Não
KeyFilePath O caminho para a chave da conta de serviço ao usar a autenticação da conta de serviço. N/A String Somente quando OAuthMechanism=0
KMSKeyName Especifica o nome da chave do KMS a ser usada ao criptografar e descriptografar dados. N/A String Não
LargeResultsDataSetId Especifica o conjunto de dados de destino para armazenar resultados de consultas grandes. N/A String Não
LargeResultsDatasetExpirationTime Especifica o ciclo de vida de todas as tabelas no conjunto de dados de resultados grandes, em milissegundos. 3600000 Longo Não
Location Especifica o local em que o driver cria ou consulta conjuntos de dados. N/A String Não
LogLevel Limita os detalhes que o motorista registra durante as interações. Escolha uma das opções a seguir:
  • 0: OFF
  • 1: ERROR
  • 2: WARNING
  • 3: INFO
0 Número inteiro Não
LogPath Especifica o diretório em que o driver grava arquivos de registro. N/A String Não
LogFileCount Especifica o número máximo de arquivos de registro a serem mantidos. 0 Número inteiro Não
LogFileSize Especifica o tamanho máximo de cada arquivo de registro em bytes. 0 Longo Não
MaxResults Especifica o número de resultados por página no resultado da API BigQuery. 10000 Longo Não
MaxThreads Define o número máximo de linhas de execução que o conector pode usar para processamento simultâneo em um pool de linhas de execução. Para configurar essa propriedade como uma definição em todo o conector para conectores que não são do Windows, especifique-a no arquivo googlebigqueryodbc.ini. 8 Número inteiro Não
OAuthMechanism O tipo de autenticação. Escolha uma das opções a seguir:
  • 0: autenticação da conta de serviço
  • 3: autenticação de Application Default Credentials
  • 4: autenticação da federação de identidade da carga de trabalho ou da federação de identidade de colaboradores
N/A Número inteiro Sim
ProjectId O ID do projeto padrão para o motorista. O driver usa esse projeto para executar consultas e o fatura pelo uso de recursos. N/A String Sim
ProxyHost Nome do host ou endereço IP de um servidor proxy. N/A String Não
ProxyPort Número da porta em que o servidor proxy está detectando. N/A String Não
ProxyPwd Senha para autenticação ao se conectar por um servidor proxy. N/A String Não
ProxyUid Nome de usuário para autenticação ao se conectar por um servidor proxy. N/A String Não
PrivateServiceConnectUris Endpoints personalizados para substituir os endpoints padrão. Exemplos:
  • 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 String separada por vírgulas Não
QueryDialect Especifica qual dialeto de consulta usar. Use SQL para o GoogleSQL (altamente recomendado) e BIG_QUERY para o SQL legado. SQL String Não
QueryProperties Configura propriedades que podem modificar o comportamento da consulta. N/A Map<String, String> Não
UniverseDomain Especifica o domínio do universo da sua organização. googleapis.com String Não
UseQueryCache Ativa o recurso de cache de consultas no BigQuery. true Booleano Não

Mapeamento de tipo de dados

Quando você executa consultas pelo driver ODBC para BigQuery, ocorre o seguinte mapeamento de tipos de dados:

Tipo do GoogleSQL Tipo 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

Exemplos

Os exemplos a seguir demonstram como usar consultas parametrizadas e scripts com várias instruções com o driver ODBC.

Consultas parametrizadas

// 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 de várias instruções

// 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);

Preços

Você pode baixar o driver ODBC para BigQuery sem custos financeiros. No entanto, ao usar o driver, os preços padrão de análise do BigQuery são aplicados.

A seguir