Usar el controlador JDBC para BigQuery

El controlador Java Database Connectivity (JDBC) para BigQuery conecta tu aplicación Java a BigQuery, lo que te permite usar las funciones de BigQuery con las herramientas y la infraestructura que prefieras. Este controlador se ha diseñado específicamente para BigQuery y no se puede usar con otros productos o servicios. No necesitas ninguna licencia adicional para usar este controlador.

Antes de empezar

  1. Familiarízate con los controladores JDBC y el paquete java.sql.
  2. Verifica que tu sistema esté configurado con Java Runtime Environment (JRE) 8.0 o una versión posterior.

Configurar el controlador

Para configurar el controlador JDBC de BigQuery, debe instalar el controlador, autenticarse en BigQuery y establecer una conexión.

Instalar el controlador

  1. Descarga uno de los siguientes paquetes JDBC:
    • Uber JAR. Un único archivo JAR con todas las dependencias incluidas.
    • JAR ligero con dependencias. Un archivo ZIP que incluye un archivo JAR ligero con todas las dependencias.
    • Uber JAR sombreado. Un único archivo JAR con todas las dependencias incluidas y sombreadas.
  2. Añade el archivo JAR descargado a tu classpath para que el compilador y el tiempo de ejecución de Java puedan localizar las clases JDBC necesarias.

Autenticarse en BigQuery

El controlador JDBC de BigQuery ofrece varias opciones de autenticación:

  • Usar una cuenta de servicio
  • Usar una cuenta de usuario de Google
  • Usar un token de acceso y un token de actualización pregenerados
  • Usar las credenciales de aplicación predeterminadas
  • Usar un método externo

Autenticar con una cuenta de servicio

Cuando establezca una conexión con el controlador JDBC de BigQuery, haga lo siguiente:

  1. Asigna el valor 0 a la propiedad de conexión OAuthType.
  2. Asigna a la propiedad de conexión ProjectId el nombre de tu proyecto de BigQuery.
  3. Realiza una de estas acciones:
    • Si usas un correo y una clave de cuenta de servicio, asigna a la propiedad de conexión OAuthServiceAcctEmail la dirección de correo de tu cuenta de servicio de Google y a la propiedad de conexión OAuthPvtKey el objeto JSON de la clave de la cuenta de servicio. En OAuthPvtKey, puedes usar el objeto JSON de la clave o la ruta completa del archivo de claves.
    • Si usas un archivo de clave de cuenta de servicio, asigna a la propiedad de conexión OAuthPvtKeyPath la ruta completa al archivo de clave de la cuenta de servicio.

En los dos ejemplos siguientes se usa la autenticación con cuenta de servicio:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=0;
OAuthServiceAcctEmail=bq-jdbc-sa@mytestproject.iam.gserviceaccount.com;
OAuthPvtKey=my-sa-key
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=0;
OAuthPvtKeyPath=path/to/file/secret.json;

Autenticar con una cuenta de usuario de Google

Cuando establezca una conexión con el controlador JDBC de BigQuery, haga lo siguiente:

  1. Asigna el valor 1 a la propiedad de conexión OAuthType.
  2. Asigna a la propiedad de conexión ProjectId el nombre de tu proyecto de BigQuery.
  3. Asigna el valor de la propiedad de conexión OAuthClientId a tu ID de cliente y el valor de la propiedad de conexión OAuthClientSecret a tu secreto de cliente.

Para obtener más información, consulta los artículos sobre cómo usar OAuth 2.0 para acceder a las APIs de Google y gestionar clientes de OAuth.

En el siguiente ejemplo se usa la autenticación de cuentas de usuario de Google:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=1;
OAuthClientId=123456789012-abcdefghijklmnopqrstuvwxyz12345.apps.googleusercontent.com;
OAuthClientSecret=_aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uV;

Autenticarse con un token de acceso o de actualización generado previamente

Cuando establezca una conexión con el controlador JDBC de BigQuery, haga lo siguiente:

  1. Asigna el valor 2 a la propiedad de conexión OAuthType.
  2. Asigna a la propiedad de conexión ProjectId el nombre de tu proyecto de BigQuery.
  3. Realiza una de estas acciones:
    • Si usas un token de acceso generado previamente, asigna el valor de la propiedad de conexión OAuthAccessToken a tu token de acceso.
    • Si usas un token de actualización generado previamente, asigna a la propiedad OAuthRefreshToken connection tu token de actualización, a la propiedad OAuthClientId connection tu ID de cliente y a la propiedad OAuthClientSecret connection tu secreto de cliente.

Para obtener más información, consulta el artículo sobre cómo usar OAuth 2.0 para acceder a las APIs de Google.

En el siguiente ejemplo se usa la autenticación con tokens de acceso pregenerados:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=2;
OAuthAccessToken=ya29.a0AfH6SMCiH1L-x_yZABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_;

En el siguiente ejemplo se usa la autenticación con tokens de actualización pregenerados:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=2;
OAuthClientId=123456789012-abcdefghijklmnopqrstuvwxyz12345.apps.googleusercontent.com;
OAuthClientSecret=_aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uV;
OAuthRefreshToken=1/fFAGRNJru1FTz70BzhT3Zg;

Autenticarse con credenciales de aplicación predeterminadas

Las credenciales predeterminadas de la aplicación (ADC) son una estrategia que utilizan las bibliotecas de autenticación para encontrar automáticamente las credenciales en función del entorno de la aplicación.

Cuando establezca una conexión con el controlador JDBC de BigQuery, haga lo siguiente:

  1. Asigna el valor 3 a la propiedad de conexión OAuthType.
  2. Asigna a la propiedad de conexión ProjectId el nombre de tu proyecto de BigQuery.

Para obtener más información, consulta Configurar credenciales predeterminadas de la aplicación.

En el siguiente ejemplo se usa la autenticación de ADC:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=3;

Autenticarse con un método externo

Puedes autenticarte con métodos externos, como Workforce Identity Federation o Workload Identity Federation.

Cuando establezca una conexión con el controlador JDBC de BigQuery, haga lo siguiente:

  1. Asigna el valor 4 a la propiedad de conexión OAuthType.
  2. Asigna a la propiedad de conexión ProjectId el nombre de tu proyecto de BigQuery.
  3. Realiza una de estas acciones:
    • Asigna a la propiedad de conexión OAuthPvtKey o a la propiedad de conexión OAuthPvtKeyPath la ruta completa del archivo de configuración. En OAuthPvtKey, puedes usar el objeto JSON de la clave o la ruta completa del archivo de claves.
    • Asigna a la propiedad de conexión OAuthPvtKey el objeto de configuración de la cuenta externa sin procesar.
    • Define las siguientes propiedades de conexión BYOID, que se describen en la sección Propiedades de conexión:
      • BYOID_AudienceUri
      • BYOID_CredentialSource
      • BYOID_PoolUserProject
      • BYOID_SA_Impersonation_Uri
      • BYOID_SubjectTokenType
      • BYOID_TokenUri

En los siguientes ejemplos se utilizan métodos de autenticación externos:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=4;
OAuthPvtKeyPath=path/to/file/secret.json;
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=4;
OAuthPvtKey=External_account_configuration_object;
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
ProjectId=MyTestProject;OAuthType=4;
BYOID_AudienceUri=//iam.googleapis.com/projects/my-project/locations/US-EAST1/workloadIdentityPools/my-pool-/providers/my-provider;
BYOID_SubjectTokenType=urn:ietf:params:oauth:tokentype:id_token;
BYOID_CredentialSource={\"file\":\"/path/to/file\"};
BYOID_SA_Impersonation_Uri=my-sa;
BYOID_TokenUri=https://sts.googleapis.com/v1/token;"

A continuación, se muestra un ejemplo de archivo de configuración:

{
  "type": "external_account",
  "audience": "//iam.googleapis.com/locations/global/workforcePools/my_pool_name/providers/my_provider_name",
  "subject_token_type": "urn:ietf:params:oauth:token-type:id_token",
  "token_url": "https://sts.googleapis.com/v1/token",
  "credential_source": {
    "file": "/path/to/workforce/tokrn.txt"
  },
  "workforce_pool_user_project": "my_project",
  "token_info_url": "https://sts.googleapis.com/v1/introspect"
}

Establecer una conexión

Para establecer una conexión con el controlador JDBC de BigQuery, haga lo siguiente:

  1. Añade la dependencia google-cloud-bigquery-jdbc a tu archivo de compilación Maven POM/Gradle:

    <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>
  2. Si usas un proyecto de Gradle, añade lo siguiente al archivo de compilación:

    dependencies {
    // ... other dependencies
    implementation files('path/to/file/google-jdbc-jar-with-dependencies.jar')
    }
  3. Identifica la cadena de conexión del controlador JDBC. Esta cadena recoge toda la información esencial que se necesita para establecer una conexión entre tu aplicación Java y una base de datos específica. El controlador JDBC de la cadena de conexión de BigQuery tiene el siguiente formato:

    jdbc:bigquery://HOST:PORT;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;PROPERTIES

    Haz los cambios siguientes:

    • HOST: la dirección DNS o IP del servidor.
    • PORT: número de puerto TCP.
    • PROJECT_ID: el ID de tu proyecto de BigQuery.
    • AUTH_TYPE: un número que especifica el tipo de autenticación que has usado. Una de las siguientes:
      • 0: autenticación de cuenta de servicio de Google
      • 1: autenticación de la cuenta de usuario de Google
      • 2: autenticación con token de actualización o token de acceso pregenerado
      • 3: autenticación de credenciales de aplicación predeterminadas
      • 4: métodos de autenticación externos, como Workforce Identity Federation o Workload Identity Federation
    • PROPERTIES: propiedades de conexión adicionales para el controlador JDBC. Las propiedades deben indicarse en el formato property_1=value_1; property_2=value_2;.... En los nombres de las propiedades no se distingue entre mayúsculas y minúsculas. Para ver una lista completa de las propiedades de conexión, consulta Propiedades de conexión.
  4. Conéctate al controlador con la clase DriverManager o DataSource.

    • Conéctate a la clase DriverManager:

      import java.sql.Connection;
      import java.sql.DriverManager;
      
      private static Connection getJdbcConnectionDM(){
        Connection connection = DriverManager.getConnection(CONNECTION_STRING);
        return connection;
      }

      Sustituye CONNECTION_STRING por la cadena de conexión del paso anterior.

    • Conéctate a la clase 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;
      }

      Sustituye CONNECTION_STRING por la cadena de conexión del paso anterior.

      La clase DataSource también tiene métodos setter que puedes usar para definir propiedades de conexión, en lugar de incluir todas las propiedades en la cadena de conexión. A continuación, se muestra un ejemplo:

      private static Connection getConnection() throws SQLException {
        DataSource ds = new DataSource();
        ds.setURL(CONNECTION_STRING);
        ds.setAuthType(3);  // Application Default Credentials
        ds.setProjectId("MyTestProject");
        ds.setEnableHighThroughputAPI(true);
        ds.setLogLevel("6");
        ds.setUseQueryCache(false);
        return ds.getConnection();
      }

Descubrir las funciones del conductor

Ahora que te has conectado al controlador JDBC de BigQuery, puedes explorar sus funciones.

Conector SQL

El conector de SQL te permite ejecutar consultas de SQL con BigQuery. Usa la propiedad de conexión QueryDialect para especificar el dialecto SQL que quieras usar.

Asignación de tipos de datos

El controlador JDBC para BigQuery admite las siguientes asignaciones de tipos de datos:

Tipo de BigQuery Tipo de SQL Tipo de Java
ARRAY ARRAY Array
BIGNUMERIC NUMERIC BigDecimal
BOOL BOOLEAN Boolean
BYTES VARBINARY byte[]
DATE DATE Date
DATETIME OTHER String
FLOAT64 DOUBLE Double
GEOGRAPHY OTHER String
INT64 BIGINT Long
INTERVAL OTHER String
JSON OTHER String
NUMERIC NUMERIC BigDecimal
STRING NVARCHAR String
STRUCT STRUCT Struct
TIME TIME Time
TIMESTAMP TIMESTAMP Timestamp

Registros anidados y repetidos

El controlador JDBC para BigQuery admite registros anidados y repetidos, en los que el controlador devuelve el tipo base como un objeto struct o una representación de cadena de un objeto JSON.

A continuación, se muestra un ejemplo de consulta del registro base de datos de 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());

El resultado es el siguiente:

{
  "v": {
    "f": [
      {
        "v": "Adam"
      },
      {
        "v": "5"
      }
    ]
  }
}

A continuación, se muestra un ejemplo de consulta de subcomponentes de un objeto 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());
    }

A continuación, se muestra un ejemplo de consulta de una matriz estándar de datos repetidos:

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

A continuación, se muestra un ejemplo de consulta de una matriz struct de datos repetidos:

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

Conjunto de resultados de gran tamaño

Para obtener conjuntos de resultados de gran tamaño cuando uses el controlador JDBC para BigQuery, haz lo siguiente:

  • Si la propiedad de conexión QueryDialect tiene el valor SQL, especifica un conjunto de datos y una tabla para almacenar los resultados con las propiedades de conexión LargeResultDataset y LargeResultTable.
  • Si la propiedad de conexión QueryDialect tiene el valor BIG_QUERY, asigne el valor TRUE a la propiedad de conexión AllowLargeResults y especifique un conjunto de datos y una tabla para almacenar los resultados con las propiedades de conexión LargeResultDataset y LargeResultTable.

En ambos casos, puedes usar la propiedad LargeResultsDatasetExpirationTimeconnection para especificar la duración del conjunto de datos de destino.

Si no especifica valores para las propiedades de conexión LargeResultDataset y LargeResultTable, el controlador JDBC de BigQuery creará un conjunto de datos oculto llamado _google_jdbc y una tabla temporal en él. Estos recursos se eliminan automáticamente al cabo de 24 horas.

Se siguen aplicando todas las cuotas y los límites de BigQuery.

Parámetros posicionales

Los parámetros posicionales son marcadores de posición en una instrucción SQL que representan los valores que se deben proporcionar durante la ejecución de la consulta. El controlador JDBC de BigQuery admite parámetros posicionales con el símbolo de interrogación (?). A continuación, se muestra un ejemplo de consulta que usa un parámetro posicional:

PreparedStatement preparedStatement = connection.prepareStatement(
    "SELECT * FROM MyTestTable where testColumn = ?");
preparedStatement.setString(1, "string2");
ResultSet resultSet = statement.executeQuery(selectQuery);

SELECT consultas

Puedes usar el controlador JDBC para BigQuery para ejecutar SELECT consultas a través de la API de BigQuery o la API Read de BigQuery Storage.

Si usas la API de BigQuery, define la propiedad JobCreationMode connection para especificar si la consulta se ejecuta con o sin crear un trabajo.

Si usas la API Storage Read, usa la propiedad de conexión EnableHighThroughputAPI para habilitar la API y verificar que se cumplen las siguientes condiciones:

  • El esquema no usa el tipo INTERVAL.
  • El número total de filas es inferior al valor de la propiedad de conexión HighThroughputMinTableSize.
  • La proporción de filas por página es inferior al valor de la propiedad de conexión HighThroughputActivationRatio.

Inserción en bloque

Para realizar operaciones de inserción masiva con el controlador JDBC de BigQuery, usa el método executeBatch.

A continuación, se muestra un ejemplo de operación de escritura:

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

Almacenamiento de registros

El controlador JDBC de BigQuery admite el registro de acciones en el controlador mediante Java Util Logging. El registro puede afectar al rendimiento, por lo que solo debes habilitarlo para registrar un problema y, después, inhabilitarlo.

Para configurar el registro, haz lo siguiente:

  1. Asigna el valor de la propiedad LogLevel según la siguiente tabla:

    LogLevel value LogLevel Descripción
    0 OFF No se registra ningún mensaje.
    1 SEVERE Fallos o errores graves que afecten a la funcionalidad de la aplicación.
    2 WARNING Problemas o situaciones potenciales que podrían requerir atención.
    3 INFO Mensajes informativos sobre eventos y progreso normales.
    4 CONFIG Mensajes sobre la información de configuración estática.
    5 FINE Mensajes de seguimiento generales.
    6 FINER Mensajes de seguimiento detallados.
    7 FINEST Mensajes de seguimiento muy detallados, útiles para depuraciones exhaustivas.
    8 ALL Todos los mensajes se registran.
  2. Asigna a la propiedad LogPath la ruta completa de la carpeta en la que quieras guardar el archivo de registro.

También puedes configurar el registro con las variables de entorno BIGQUERY_JDBC_LOG_LEVEL y BIGQUERY_JDBC_LOG_PATH.

Propiedades de conexión

En un controlador JDBC, las propiedades de conexión son parámetros de configuración que puedes incluir en la cadena de conexión o pasar a través de los métodos setter cuando estableces una conexión con una base de datos. El controlador JDBC de BigQuery admite las siguientes propiedades de conexión.

AdditionalProjects

Esta propiedad de conexión permite que las consultas y las operaciones de metadatos accedan a conjuntos de datos de proyectos específicos, además del proyecto principal definido en la cadena de conexión.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena (cadena de IDs de proyectos separados por comas)
  • Obligatorio: no

AllowLargeResults

Esta propiedad de conexión especifica si el controlador procesa los resultados de las consultas que superan los 128 MB cuando la propiedad de conexión QueryDialect se define como BIG_QUERY. Si la propiedad de conexión QueryDialect tiene el valor SQL, la propiedad de conexión AllowLargeResults tiene el valor TRUE de forma predeterminada. Para obtener más información, consulta Conjunto de resultados grande.

  • Valor predeterminado: TRUE
  • Tipo de datos: booleano
  • Obligatorio: no

BYOID_AudienceUri

Esta propiedad de conexión especifica la propiedad de audiencia en un archivo de configuración de una cuenta externa. La propiedad audience contiene el nombre del recurso del grupo de identidades de carga de trabajo o del grupo de Workforce, así como el identificador del proveedor en ese grupo.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: solo cuando OAuthType=4

BYOID_CredentialSource

Esta propiedad de conexión define la información de obtención de tokens y la información del entorno.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: solo cuando OAuthType=4

BYOID_PoolUserProject

Esta propiedad de conexión define el proyecto de usuario cuando se usa el grupo de trabajadores. El proyecto debe tener el permiso serviceusage.services.use de gestión de identidades y accesos.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: solo cuando se usa OAuthType=4 y el grupo de trabajadores

BYOID_SA_Impersonation_Uri

Esta propiedad de conexión define la URL de la suplantación de la cuenta de servicio cuando se usan grupos de identidades de carga de trabajo y las APIs no se han integrado con UberMint.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: solo cuando se usa OAuthType=4 y un grupo de identidades de carga de trabajo con suplantación de identidad de cuenta de servicio

BYOID_SubjectTokenType

Esta propiedad de conexión define el token STS en función de la especificación de intercambio de tokens. El valor debe ser uno de los siguientes:

  • 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

  • Valor predeterminado: urn:ietf:params:oauth:tokentype:id_token
  • Tipo de datos: cadena
  • Obligatorio: solo cuando OAuthType=4

BYOID_TokenUri

Esta propiedad de conexión define el endpoint de intercambio de tokens de STS.

  • Valor predeterminado: https://sts.googleapis.com/v1/token
  • Tipo de datos: cadena
  • Obligatorio: no

ConnectionPoolSize

Esta propiedad de conexión define el tamaño del grupo de conexiones si se habilita el grupo de conexiones.

  • Valor predeterminado: 10
  • Tipo de datos: Long
  • Obligatorio: no

DefaultDataset

Esta propiedad de conexión especifica el conjunto de datos que se usa cuando ejecutas una consulta sin especificar explícitamente un conjunto de datos. Puedes usar el formato DATASET_ID o el PROJECT_ID.DATASET_ID.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

EnableHighThroughputAPI

Esta propiedad de conexión determina si se puede usar la API Storage Read. También se deben cumplir las propiedades de conexión HighThroughputActivationRatio y HighThroughputMinTableSize para usar la API Storage Read.

  • Valor predeterminado: FALSE
  • Tipo de datos: booleano
  • Obligatorio: no

EnableSession

Esta propiedad de conexión determina si la conexión inicia una sesión. Cuando se usa, el ID de sesión se transfiere a todas las consultas posteriores.

  • Valor predeterminado: FALSE
  • Tipo de datos: booleano
  • Obligatorio: no

EnableWriteAPI

Esta propiedad de conexión determina si se puede usar la API Storage Write. Para habilitar las inserciones en bloque, el valor de este campo debe ser TRUE.

  • Valor predeterminado: FALSE
  • Tipo de datos: booleano
  • Obligatorio: no

EndpointOverrides

Esta propiedad de conexión define endpoints personalizados en una cadena separada por comas.

  • Valores predeterminados:
    • BIGQUERY=https://bigquery.googleapis.com
    • READ_API=https://bigquerystorage.googleapis.com
    • OAUTH2=https://oauth2.googleapis.com
    • STS=https://sts.googleapis.com
  • Tipo de datos: cadena
  • Obligatorio: no

FilterTablesOnDefaultDataset

Esta propiedad de conexión controla el ámbito de los metadatos devueltos por los métodos DatabaseMetaData.getTables() y DatabaseMetaData.getColumns(). Si la propiedad está inhabilitada, no se aplica ningún filtro. También debe definirse la propiedad de conexión DefaultDataset para habilitar el filtrado.

  • Valor predeterminado: FALSE
  • Tipo de datos: booleano
  • Obligatorio: no

HighThroughputActivationRatio

Esta propiedad de conexión define un umbral para el número de páginas de una respuesta de consulta. Cuando se supera este número y se cumplen las condiciones EnableHighThroughputAPI y HighThroughputMinTableSize, el controlador empieza a usar la API de lectura de almacenamiento.

  • Valor predeterminado: 2
  • Tipo de datos: número entero
  • Obligatorio: no

HighThroughputMinTableSize

Esta propiedad de conexión define un umbral para el número de filas de una respuesta de consulta. Cuando se supera este número y se cumplen las condiciones EnableHighThroughputAPI y HighThroughputActivationRatio, el controlador empieza a usar la API de lectura de almacenamiento.

  • Valor predeterminado: 100
  • Tipo de datos: número entero
  • Obligatorio: no

JobCreationMode

Esta propiedad de conexión determina si las consultas se ejecutan sin crear tareas. Un valor 1 significa que se crean trabajos para cada consulta, mientras que un valor 2 significa que las consultas se pueden ejecutar sin trabajos.

  • Valor predeterminado: 2
  • Tipo de datos: número entero
  • Obligatorio: no

JobTimeout

Esta propiedad de conexión define el tiempo de espera de la tarea (en segundos) tras el cual se cancela la tarea en el servidor.

  • Valor predeterminado: 0
  • Tipo de datos: Long
  • Obligatorio: no

KMSKeyName

Esta propiedad de conexión define el nombre de la clave de KMS para cifrar los datos.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

Labels

Esta propiedad de conexión define las etiquetas asociadas a la consulta para organizar y agrupar los trabajos de consulta.

  • Valor predeterminado: N/A
  • Tipo de datos: Map<String, String>
  • Obligatorio: no

LargeResultDataset

Esta propiedad de conexión define el conjunto de datos de destino de los resultados de las consultas. Para obtener más información, consulta Conjunto de resultados grande.

  • Valor predeterminado: _google_jdbc, solo cuando QueryDialect=BIG_QUERY o cuando QueryDialect=SQL y la propiedad de conexión LargeResultTable están definidas.
  • Tipo de datos: cadena
  • Obligatorio: no

LargeResultsDatasetExpirationTime

Esta propiedad de conexión especifica la duración de todas las tablas de un conjunto de datos en milisegundos. Esta propiedad se ignora si el conjunto de datos ya tiene un tiempo de vencimiento predeterminado.

  • Valor predeterminado: 3600000
  • Tipo de datos: Long
  • Obligatorio: no

LargeResultTable

Esta propiedad de conexión define la tabla de destino de los resultados de las consultas. Para obtener más información, consulta Conjunto de resultados grande.

  • Valor predeterminado: temp_table..., solo cuando QueryDialect=BIG_QUERY o cuando QueryDialect=SQL y la propiedad de conexión LargeResultTable están definidas.
  • Tipo de datos: cadena
  • Obligatorio: no

ListenerPoolSize

Esta propiedad de conexión define el tamaño del grupo de listeners si el grupo de conexiones está habilitado.

  • Valor predeterminado: 10
  • Tipo de datos: Long
  • Obligatorio: no

Location

Esta propiedad de conexión especifica la ubicación en la que se crean o se consultan los conjuntos de datos. BigQuery determina automáticamente la ubicación si no se define este valor.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

LogLevel

Esta propiedad de conexión controla el nivel de detalle que se registra durante las interacciones con la base de datos. Para ver las descripciones de los niveles, consulta Logging.

  • Valor predeterminado: 0
  • Tipo de datos: número entero
  • Obligatorio: no

LogPath

Esta propiedad de conexión define el directorio en el que se escriben los archivos de registro. Para obtener más información, consulta Logging.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

MaximumBytesBilled

Esta propiedad de conexión limita el número de bytes facturados. Las consultas con bytes facturados superiores a este límite fallarán sin suponer ningún cargo.

  • Valor predeterminado: 0
  • Tipo de datos: Long
  • Obligatorio: no

MaxResults

Esta propiedad de conexión define el número máximo de resultados por página.

  • Valor predeterminado: 10000
  • Tipo de datos: Long
  • Obligatorio: no

MetaDataFetchThreadCount

Esta propiedad de conexión configura el número de hilos que se usan para los métodos de metadatos de la base de datos.

  • Valor predeterminado: 32
  • Tipo de datos: número entero
  • Obligatorio: no

OAuthAccessToken

Esta propiedad de conexión especifica el token de acceso que se usa para la autenticación con tokens de acceso pregenerados.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: cuando AUTH_TYPE=2

OAuthClientId

Esta propiedad de conexión define el ID de cliente para la autenticación con tokens de actualización pregenerados y la autenticación de cuentas de usuario.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: cuando AUTH_TYPE=1 o AUTH_TYPE=2

OAuthClientSecret

Esta propiedad de conexión define el secreto de cliente para la autenticación con tokens de actualización pregenerados y la autenticación de cuentas de usuario.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: cuando AUTH_TYPE=1 o AUTH_TYPE=2

OAuthP12Password

Esta propiedad de conexión define la contraseña del archivo de clave PKCS12.

  • Valor predeterminado: notasecret
  • Tipo de datos: cadena
  • Obligatorio: no

OAuthPvtKey

Esta propiedad de conexión define la clave de la cuenta de servicio cuando se usa la autenticación de la cuenta de servicio. Este valor puede ser un objeto de archivo de claves JSON sin formato o una ruta al archivo de claves JSON.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: cuando AUTH_TYPE=0 y el valor de OAuthPvtKeyPath no están definidos

OAuthPvtKeyPath

Esta propiedad de conexión define la ruta a la clave de la cuenta de servicio cuando se usa la autenticación con cuenta de servicio.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: cuando no se han definido AUTH_TYPE=0, OAuthPvtKey ni OAuthServiceAcctEmail

OAuthRefreshToken

Esta propiedad de conexión define el token de actualización para la autenticación con tokens de actualización pregenerados. Un token de actualización de OAuth 2.0 es un tipo especial de token que permite a una aplicación obtener un nuevo token de acceso cuando caduca el actual, sin que el usuario tenga que volver a autenticarse.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: cuando AUTH_TYPE=2

OAuthServiceAcctEmail

Esta propiedad de conexión define el correo de la cuenta de servicio cuando se usa la autenticación de cuenta de servicio.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: cuando AUTH_TYPE=0 y el valor de OAuthPvtKeyPath no están definidos

OAuthType

Esta propiedad de conexión especifica el tipo de autenticación. El valor debe ser uno de los siguientes:

  • 0: autenticación de cuenta de servicio de Google
  • 1: autenticación de la cuenta de usuario de Google
  • 2: autenticación con token de actualización o token de acceso pregenerado
  • 3: autenticación de credenciales de aplicación predeterminadas
  • 4: métodos de autenticación externos, como la federación de identidades para los trabajadores o la federación de identidades de carga de trabajo

  • Valor predeterminado: -1
  • Tipo de datos: número entero
  • Obligatorio: sí

PartnerToken

Los partners usan esta propiedad de conexión para hacer un seguimiento del uso del controlador. Google Cloud

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

PrivateServiceConnectUris

Esta propiedad de conexión es idéntica a la propiedad EndpointOverrides. Usa la propiedad EndpointOverrides en su lugar.

ProjectId

Esta propiedad de conexión define el ID de proyecto predeterminado del controlador. Este proyecto se usa para ejecutar consultas y se factura por el uso de recursos. Si no se define, el controlador infiere un ID de proyecto.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no, pero muy recomendable

ProxyHost

Esta propiedad de conexión define el nombre de host o la dirección IP de un servidor proxy a través del cual se enruta la conexión JDBC.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

ProxyPort

Esta propiedad de conexión define el número de puerto en el que el servidor proxy está esperando conexiones.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

ProxyPwd

Esta propiedad de conexión define la contraseña necesaria para la autenticación al conectarse a través de un servidor proxy que la requiera.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

ProxyUid

Esta propiedad de conexión define el nombre de usuario necesario para la autenticación al conectarse a través de un servidor proxy que lo requiera.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

QueryDialect

Esta propiedad de conexión define el dialecto SQL para la ejecución de consultas. Usa SQL para GoogleSQL (muy recomendable) y BIG_QUERY para SQL antiguo.

  • Valor predeterminado: SQL
  • Tipo de datos: cadena
  • Obligatorio: no

QueryProperties

Esta propiedad de conexión configura las modificaciones del comportamiento de las consultas.

A continuación, se muestra un ejemplo que se define en la cadena de conexión:

jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;
QueryProperties=dataset_project_id=TestProjectID,time_zone=America/New_York;

A continuación, se muestra un ejemplo definido en la clase DataSource:

Map<String, String> queryProperties = new HashMap<>();
queryProperties.put("dataset_project_id", "TestProjectID");
queryProperties.put("time_zone", "America/New_York");
DataSource dataSource = new DataSource();
dataSource.setQueryProperties(queryProperties);

Para obtener más información, consulta ConnectionProperty.

  • Valor predeterminado: N/A
  • Tipo de datos: Map<String, String>
  • Obligatorio: no

RequestGoogleDriveScope

Esta propiedad de conexión se usa para solicitar acceso a Google Drive. Si está habilitada, se añade el ámbito de solo lectura de Drive a la conexión. Para habilitar esta propiedad, asigna el valor 1.

  • Valor predeterminado: 0
  • Tipo de datos: número entero
  • Obligatorio: no

RetryInitialDelay

Esta propiedad de conexión define el tiempo de espera (en segundos) antes del primer reintento.

  • Valor predeterminado: 0
  • Tipo de datos: Long
  • Obligatorio: no

RetryMaxDelay

Esta propiedad de conexión define el límite máximo (en segundos) del retraso de reintento.

  • Valor predeterminado: 0
  • Tipo de datos: Long
  • Obligatorio: no

ServiceAccountImpersonationChain

Esta propiedad de conexión especifica una lista separada por comas de correos de cuentas de servicio en la cadena de suplantación de identidad.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

ServiceAccountImpersonationEmail

Esta propiedad de conexión define la cuenta de servicio cuya identidad se va a suplantar.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

ServiceAccountImpersonationScopes

Esta propiedad de conexión especifica una lista de permisos de OAuth2 separados por comas que se van a usar con la cuenta suplantada.

  • Valor predeterminado: https://www.googleapis.com/auth/bigquery
  • Tipo de datos: cadena
  • Obligatorio: no

ServiceAccountImpersonationTokenLifetime

Esta propiedad de conexión define el tiempo de vida del token de la cuenta suplantada (en segundos).

  • Valor predeterminado: 3600
  • Tipo de datos: número entero
  • Obligatorio: no

SSLTrustStore

Esta propiedad de conexión especifica la ruta completa al almacén de confianza de Java que contiene certificados de autoridad de certificación (CA) de confianza. El controlador utiliza este almacén de confianza para validar la identidad del servidor durante el handshake SSL/TLS.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: no

SSLTrustStorePwd

Esta propiedad de conexión especifica la contraseña de Java TrustStore indicada en la propiedad SSLTrustStore.

  • Valor predeterminado: N/A
  • Tipo de datos: cadena
  • Obligatorio: solo si se usa un almacén de confianza de Java protegido con contraseña

SWA_ActivationRowCount

Esta propiedad de conexión define un umbral de executeBatch insert filas que, cuando se supera, hace que el conector cambie a la API Storage Write.

  • Valor predeterminado: 3
  • Tipo de datos: número entero
  • Obligatorio: no

SWA_AppendRowCount

Esta propiedad de conexión define el tamaño del flujo de escritura.

  • Valor predeterminado: 1000
  • Tipo de datos: número entero
  • Obligatorio: no

Timeout

Esta propiedad de conexión define el tiempo, en segundos, que el conector intenta volver a realizar una llamada a la API fallida antes de que se agote el tiempo de espera.

  • Valor predeterminado: 0
  • Tipo de datos: Long
  • Obligatorio: no

UniverseDomain

Esta propiedad de conexión define el dominio del universo, el dominio de nivel superior asociado a los recursos de tu organización. Google Cloud

  • Valor predeterminado: googleapis.com
  • Tipo de datos: cadena
  • Obligatorio: no

UnsupportedHTAPIFallback

Esta propiedad de conexión determina si el conector vuelve a la API REST (cuando se le asigna el valor TRUE) o devuelve un error (cuando se le asigna el valor FALSE).

  • Valor predeterminado: TRUE
  • Tipo de datos: booleano
  • Obligatorio: no

UseQueryCache

Esta propiedad de conexión habilita el almacenamiento en caché de consultas.

  • Valor predeterminado: TRUE
  • Tipo de datos: booleano
  • Obligatorio: no