Usa el controlador ODBC para BigQuery

El controlador de conectividad abierta de bases de datos (ODBC) para BigQuery conecta tus aplicaciones que no son de Java a BigQuery, lo que te permite usar las funciones de BigQuery con tu infraestructura y herramientas preferidas. Para conectar aplicaciones de Java a BigQuery, usa el controlador JDBC para BigQuery.

El controlador ODBC para BigQuery está disponible bajo la licencia Apache 2.0.

Antes de comenzar

  1. Asegúrate de conocer los controladores ODBC y los administradores de controladores.

  2. Asegúrate de que tu sistema operativo cumpla con los siguientes requisitos:

    Sistema operativo Arquitecturas admitidas Versión y dependencias mínimas
    Windows 32 bits (x86) y 64 bits (x64) Versión: Windows 10, Windows Server 2016 o posterior

    Dependencia: Microsoft Visual C++ Redistributable para Visual Studio 2019 o 2022
    macOS 64 bits (x86_64), ARM64 (Apple Silicon) Versión: macOS 12 (Monterey) o posterior

    Dependencia: Un administrador de controladores ODBC (por ejemplo, unixODBC). Asegúrate de agregar el directorio de instalación a tu DYLD_LIBRARY_PATH.
    Linux 64 bits (x86_64) Versión: Cualquier distribución con glibc 2.27 o posterior (por ejemplo, Ubuntu 20.04 LTS+, Debian 11+)

    Dependencia: Un administrador de controladores ODBC (por ejemplo, unixODBC). Asegúrate de agregar el directorio de instalación a tu LD_LIBRARY_PATH.
  3. Autentícate en BigQuery y toma nota de la siguiente información, que se usará más adelante cuando establezcas una conexión con el controlador ODBC para BigQuery. Solo debes tener en cuenta la información que corresponde al método de autenticación que usas.

    Método de autenticación Información de autenticación Ejemplo Propiedad de conexión (para configurar más adelante)
    Cuenta de servicio estándar Clave de la cuenta de servicio (objeto JSON) my-sa-key KeyFilePath
    Federación de identidades para cargas de trabajo o federación de identidades de personal Propiedad de público del archivo de configuración de la cuenta externa //iam.googleapis.com/locations/global/... BYOID_AudienceUrl
    Recuperación de tokens y archivo de información del entorno {"file":"/path/to/file"} BYOID_CredentialSource
    Proyecto del usuario (solo para el grupo de personal) my_project BYOID_PoolUserProject
    Tipo de token de STS id_token BYOID_SubjectTokenType
    Extremo de intercambio de tokens del STS https://sts.googleapis.com/v1/token BYOID_TokenUrl
    Credencial predeterminada de la aplicación Ninguno N/A N/A

Instala y configura el controlador ODBC

Puedes instalar y configurar el controlador ODBC para BigQuery con un sistema operativo Windows o que no sea de Windows.

Windows

  1. Instala el controlador que corresponda a la arquitectura de tu aplicación:

  2. Para crear un nombre de fuente de datos (DSN), haz lo siguiente:

    1. En el menú Inicio de Windows, ve a Orígenes de datos ODBC y selecciona la versión que tenga la misma cantidad de bits que tu aplicación cliente.
    2. En la página Administrador de fuentes de datos ODBC, haz clic en la pestaña Controladores.
    3. En la lista de controladores ODBC instalados, busca ODBC Driver for BigQuery.
    4. Selecciona la pestaña DSN del sistema para crear un DSN para todos los usuarios o la pestaña DSN del usuario para crear un DSN para el usuario actual. En general, se recomiendan los DSN del sistema, ya que algunas aplicaciones cargan datos con diferentes cuentas de usuario y es posible que no detecten otros DSN del usuario.
    5. Haz clic en Agregar.
    6. En el diálogo Create New Data Source, selecciona ODBC Driver for BigQuery y, luego, haz clic en Finish. Se abrirá el diálogo ODBC Driver for BigQuery DSN Setup.
    7. En el campo Nombre de la fuente de datos, ingresa un nombre para tu DSN.
    8. Agrega propiedades de conexión. Para obtener una lista completa de las propiedades, consulta Propiedades de conexión.

Sistemas operativos que no son de Windows

  1. Instala el controlador que corresponda a tu sistema operativo:

  2. Extrae el contenido del archivo ZIP o TAR que descargaste.

  3. Mueve el contenido del archivo ZIP o TAR al directorio en el que deseas instalar el conector. La ruta del objeto compartido del controlador ODBC para BigQuery es INSTALL_DIR/lib/libgoogle_cloud_odbc_bq_driver.so, donde INSTALL_DIR es tu directorio de instalación.

  4. Actualiza tus archivos .ini para reflejar la nueva ruta de acceso del conector.

    En el siguiente ejemplo, se actualizan los archivos .ini en un 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

    Reemplaza VERSION por la versión del controlador.

Establece la conexión

Para establecer una conexión entre tu aplicación y BigQuery con el controlador ODBC para BigQuery, identifica tu cadena de conexión. Puedes omitir este paso si ya configuraste las propiedades de conexión a través de tu DSN.

La cadena de conexión tiene el siguiente formato:

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

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID de tu proyecto de BigQuery.
  • AUTH_TYPE: Es un número que especifica el tipo de autenticación que usaste. Selecciona una de las siguientes opciones:
    • 0: Para la autenticación de la cuenta de servicio
    • 3: Para la autenticación con credenciales predeterminadas de la aplicación
    • 4: Para la autenticación de la federación de identidades para cargas de trabajo o la federación de identidades de personal
  • AUTH_PROPS: La información de autenticación que anotaste cuando te autenticaste en BigQuery, que se muestra en el formato property_1=value_1; property_2=value_2;..., por ejemplo, KeyFilePath=my-sa-key, si te autenticaste con una cuenta de servicio.
  • OTHER_PROPS (opcional): Son propiedades de conexión adicionales para el controlador ODBC, que se indican en el formato property_1=value_1; property_2=value_2;.... Para obtener una lista completa de las propiedades de conexión, consulta Propiedades de conexión.

Propiedades de la conexión

Las propiedades de conexión del controlador ODBC son parámetros de configuración que se incluyen en la cadena de conexión cuando estableces una conexión a una base de datos. El controlador ODBC para BigQuery admite las siguientes propiedades de conexión.

Propiedad de conexión Descripción Valor predeterminado Tipo de datos Obligatorio
AdditionalProjects Son los proyectos a los que el controlador puede acceder para realizar consultas y operaciones de metadatos, además del proyecto principal establecido por la propiedad ProjectId. N/A Cadena separada por comas No
AllowHtapiForLargeResults Determina si el controlador puede usar la API de BigQuery Storage Read. 0 Booleano No
AllowLargeResults Determina si el controlador procesa los resultados de la consulta que son mayores a 128 MB cuando la propiedad QueryDialect se establece en BIG_QUERY. Si la propiedad QueryDialect se establece en SQL, el controlador siempre procesa los resultados de consultas grandes. 0 Booleano No
BYOID_AudienceUrl Contiene el nombre del recurso del grupo de identidades para cargas de trabajo o el grupo de personal y el identificador del proveedor en ese grupo. N/A String Solo cuando OAuthMechanism=4
BYOID_CredentialSource Establece la información necesaria para recuperar el token, así como cierta información del entorno. N/A String Solo cuando OAuthMechanism=4
BYOID_PoolUserProject Establece el proyecto cuando sea un grupo de personal y no un grupo de Workload Identity. N/A String Solo cuando OAuthMechanism=4 y se usa un grupo de trabajadores
BYOID_SubjectTokenType Establece el tipo de token del STS según la especificación de intercambio de tokens de OAuth 2.0. Los valores esperados incluyen lo siguiente:
  • 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 Solo cuando OAuthMechanism=4
BYOID_TokenUrl Establece el extremo de intercambio de tokens del STS. https://sts.googleapis.com/v1/token String No
DefaultDataset Actúa como un conjunto de datos designado dentro de un proyecto al que el controlador hace referencia automáticamente cuando ejecutas consultas sin especificar explícitamente un conjunto de datos. N/A String No
FilterTablesOnDefaultDataset Determina el alcance de los metadatos que devuelven los métodos de metadatos de tablas o columnas. Si es falso, no se aplica ningún filtro. También debes establecer la propiedad DefaultDataset para habilitar el filtrado. FALSE Booleano No
EnableSession Determina si una conexión inicia una sesión. Cuando está habilitado, la primera consulta que ejecuta esa conexión en particular inicia una sesión y el controlador pasa el ID de sesión a todas las consultas posteriores. 0 Booleano No
JobCreationMode Te permite habilitar la ruta de consulta de baja latencia. Elige una de las siguientes opciones:
  • 1: El controlador crea trabajos para cada consulta (JOB_CREATION_REQUIRED).
  • 2: El controlador ejecuta consultas sin trabajos (JOB_CREATION_OPTIONAL).
2 Número entero No
KeyFilePath Es la ruta a la clave de la cuenta de servicio cuando se usa la autenticación de cuenta de servicio. N/A String Solo cuando OAuthMechanism=0
KMSKeyName Especifica el nombre de la clave de KMS que se usará para encriptar y desencriptar datos. N/A String No
LargeResultsDataSetId Especifica el conjunto de datos de destino para almacenar los resultados de las consultas grandes. N/A String No
LargeResultsDatasetExpirationTime Especifica la vida útil de todas las tablas en el conjunto de datos de resultados grandes, en milisegundos. 3600000 Largo No
Location Especifica la ubicación en la que el conductor crea o consulta conjuntos de datos. N/A String No
LogLevel Limita el detalle que el controlador registra durante las interacciones. Elige una de las siguientes opciones:
  • 0: OFF
  • 1: ERROR
  • 2: WARNING
  • 3: INFO
0 Número entero No
LogPath Especifica el directorio en el que el controlador escribe los archivos de registro. N/A String No
LogFileCount Especifica la cantidad máxima de archivos de registro que se deben conservar. 0 Número entero No
LogFileSize Especifica el tamaño máximo de cada archivo de registro en bytes. 0 Largo No
MaxResults Especifica la cantidad de resultados por página en el resultado de la API de BigQuery. 10000 Largo No
MaxThreads Define la cantidad máxima de subprocesos que el conector puede usar para el procesamiento simultáneo en un grupo de subprocesos. Para configurar esta propiedad como un parámetro de configuración para todo el conector en el caso de los conectores que no son de Windows, especifícala en el archivo googlebigqueryodbc.ini. 8 Número entero No
OAuthMechanism Es el tipo de autenticación. Elige una de las siguientes opciones:
  • 0: Autenticación de la cuenta de servicio
  • 3: Autenticación con credenciales predeterminadas de la aplicación
  • 4: Autenticación de federación de identidades para cargas de trabajo o de federación de identidades de personal
N/A Número entero
ProjectId Es el ID del proyecto predeterminado para el controlador. El controlador usa este proyecto para ejecutar consultas y lo factura por el uso de recursos. N/A String
ProxyHost Nombre de host o dirección IP de un servidor proxy. N/A String No
ProxyPort Número de puerto en el que escucha el servidor proxy. N/A String No
ProxyPwd Contraseña para la autenticación cuando se conecta a través de un servidor proxy. N/A String No
ProxyUid Nombre de usuario para la autenticación cuando se conecta a través de un servidor proxy. N/A String No
PrivateServiceConnectUris Son extremos personalizados para reemplazar los extremos predeterminados. Ejemplos:
  • 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 Cadena separada por comas No
QueryDialect Especifica qué dialecto de consulta se debe usar. Usa SQL para GoogleSQL (muy recomendado) y BIG_QUERY para SQL heredado. SQL String No
QueryProperties Configura propiedades que pueden modificar el comportamiento de la búsqueda. N/A Map<String, String> No
UniverseDomain Especifica el dominio del universo de tu organización. googleapis.com String No
UseQueryCache Habilita la función de almacenamiento en caché de consultas en BigQuery. true Booleano No

Asignación de tipos de datos

Cuando ejecutas consultas a través del controlador ODBC para BigQuery, se produce la siguiente asignación de tipos de datos:

Tipo de GoogleSQL Tipo de SQL de 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

Ejemplos

En los siguientes ejemplos, se muestra cómo usar consultas con parámetros y secuencias de comandos de varias instrucciones con el controlador ODBC.

Consultas con parámetros

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

Secuencias de comandos de varias instrucciones

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

Precios

Puedes descargar el controlador ODBC para BigQuery sin costo. Sin embargo, cuando usas el controlador, se aplican los precios estándar de análisis de BigQuery.

¿Qué sigue?