Usa el controlador JDBC para BigQuery
El controlador de conectividad de bases de datos de Java (JDBC) para BigQuery conecta tus aplicaciones de Java a BigQuery, lo que te permite usar las funciones de BigQuery con la infraestructura y las herramientas que prefieras. Para conectar aplicaciones que no sean de Java a BigQuery, usa el controlador de conectividad abierta de bases de datos (ODBC) para BigQuery.
Limitaciones
El controlador JDBC para BigQuery está sujeto a las siguientes limitaciones:
- El controlador es específico de BigQuery y no se puede usar con otros productos o servicios.
- El tipo de datos
INTERVALno es compatible con la API de BigQuery Storage Read. - Se aplican todas las limitaciones del lenguaje de manipulación de datos (DML).
Antes de comenzar
- Asegúrate de estar familiarizado con los controladores de JDBC, Apache Maven y
el
paquete
java.sql. - Verifica que tu sistema esté configurado con Java Runtime Environment (JRE) 8.0 o una versión posterior. Para obtener información sobre cómo verificar tu versión de JRE, consulta Verifica el entorno de JRE.
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 JDBC para BigQuery. Solo necesitas anotar 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 Correo electrónico de la cuenta de servicio bq-jdbc-sa@mytestproject.s3ns.iam.gserviceaccount.comOAuthServiceAcctEmailClave de cuenta de servicio (objeto JSON) my-sa-keyOAuthPvtKeyArchivo de claves de la cuenta de servicio Archivo de claves de la cuenta de servicio (ruta de acceso completa) path/to/file/secret.jsonOAuthPvtKeyPathCuenta de usuario de Google ID de cliente 123-abc.apps.googleusercontent.comOAuthClientIdSecreto del cliente _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecretToken de acceso generado previamente Token de acceso ya29.a0AfH6SMCiH1L-x_yZOAuthAccessTokenToken de actualización generado previamente Token de actualización 1/fFAGRNJru1FTz70BzhT3ZgOAuthRefreshTokenID de cliente 123-abc.apps.googleusercontent.comOAuthClientIdSecreto del cliente _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecretCredencial predeterminada de la aplicación Ninguno N/A N/A Archivo de configuración Archivo de configuración (objeto JSON o ruta de acceso completa) path/to/file/secret.jsonOAuthPvtKeyObjeto de configuración de la cuenta externa Objeto de configuración de la cuenta external_account_configuration_objectOAuthPvtKeyOtro Propiedad de público del archivo de configuración de la cuenta externa //iam.googleapis.com/projects/my-project/locations/US-EAST1/workloadIdentityPools/my-pool-/providers/my-providerBYOID_AudienceUriArchivo de recuperación de tokens y de información del entorno {\"file\":\"/path/to/file\"}BYOID_CredentialSourceProyecto de usuario (solo si se usa un grupo de personal) my_projectBYOID_PoolUserProjectURI para la identidad temporal como cuenta de servicio (solo si se usa un grupo de personal) my-saBYOID_SA_Impersonation_UriToken del servicio de tokens de seguridad basado en la especificación de intercambio de tokens urn:ietf:params:oauth:tokentype:id_tokenBYOID_SubjectTokenTypeExtremo de intercambio de tokens del Servicio de tokens de seguridad https://sts.googleapis.com/v1/tokenBYOID_TokenUri
Instala y configura el controlador de JDBC
Puedes instalar y configurar el controlador JDBC para BigQuery descargando directamente el archivo uber-JAR o usando Maven.
Configuración de descarga directa
Para configurar el controlador de JDBC a través de la descarga directa, haz lo siguiente:
- Descarga la versión 1.6.0 del controlador.
- Copia el archivo descargado en la ubicación que especifica tu software.
Para obtener información sobre los cambios en las funciones y las actualizaciones del flujo de trabajo, consulta el registro de cambios.
Configuración de Maven
El controlador JDBC para BigQuery está disponible en Maven Central.
Para configurar tu entorno de desarrollo con el controlador de JDBC, agrega el controlador como una dependencia a tu proyecto:
Maven
Agrega la siguiente dependencia a tu archivo pom.xml:
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-bigquery-jdbc</artifactId> <version>1.6.0</version> </dependency>
Maven con uber-JAR
Agrega la siguiente dependencia a tu archivo pom.xml:
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-bigquery-jdbc</artifactId> <version>1.6.0</version> <classifier>all</classifier> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
Gradle
Agrega lo siguiente a tu archivo build.gradle:
dependencies { // ... other dependencies implementation("com.google.cloud:google-cloud-bigquery-jdbc:1.6.0") }
Establece la conexión
Para establecer una conexión entre tu aplicación de Java y BigQuery con el controlador JDBC para BigQuery, haz lo siguiente:
Identifica tu cadena de conexión para el controlador JDBC de BigQuery. Esta cadena captura toda la información necesaria para establecer una conexión entre tu aplicación de Java y BigQuery. La cadena de conexión tiene el siguiente formato:
jdbc:bigquery://HOST:PORT;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;AUTH_PROPS;OTHER_PROPS
Reemplaza lo siguiente:
HOST: Es la dirección IP o el DNS del servidor.PORT: Es el número de puerto TCP.PROJECT_ID: el ID de tu proyecto de BigQuery.AUTH_TYPE: Es un número que especifica el tipo de autenticación que usaste. Uno de los siguientes:0: para la autenticación de la cuenta de servicio (estándar y archivo de claves)1: para la autenticación de la Cuenta de Google del usuario2: para la autenticación de tokens de acceso o actualización generados previamente3: para la autenticación de credenciales predeterminadas de la aplicación4: para otros métodos de autenticación
AUTH_PROPS: Es la información de autenticación que anotaste cuando te autenticaste en BigQuery, que se indica en el formatoproperty_1=value_1; property_2=value_2;..., por ejemplo,OAuthPvtKeyPath=path/to/file/secret.json, si te autenticaste con un archivo de claves de cuenta de servicio.OTHER_PROPS(opcional): Son propiedades de conexión adicionales para el controlador de JDBC, que se indican en el formatoproperty_1=value_1; property_2=value_2;.... Para obtener una lista completa de las propiedades de conexión, consulta Propiedades de conexión.
Conecta tu aplicación de Java al controlador de JDBC para BigQuery con la clase
DriverManageroDataSource.Conéctate con la clase
DriverManager:import java.sql.Connection; import java.sql.DriverManager; private static Connection getJdbcConnectionDM(){ Connection connection = DriverManager.getConnection(CONNECTION_STRING); return connection; }
Reemplaza
CONNECTION_STRINGpor la cadena de conexión del paso anterior.Conéctate con 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; }
Reemplaza
CONNECTION_STRINGpor la cadena de conexión del paso anterior.La clase
DataSourcetambién tiene métodos set que puedes usar para establecer las propiedades de conexión, en lugar de incluirlas 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(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(); }
Propiedades de la conexión
Las propiedades de conexión del controlador de JDBC son parámetros de configuración que incluyes en la cadena de conexión o pasas a través de métodos set cuando estableces una conexión con una base de datos. El controlador de JDBC 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 que establece la propiedad
ProjectId.
|
N/A | Cadena separada por comas | No |
AllowLargeResults |
Determina si el controlador procesa los resultados de la consulta que superan los
128 MB cuando la propiedad QueryDialect se establece en
BIG_QUERY. Si la propiedad QueryDialect se establece
en SQL, el controlador siempre procesa resultados de consultas grandes.
|
TRUE |
Booleano | No |
BYOID_AudienceUri |
La propiedad de público en un archivo de configuración de cuenta externa. La propiedad de público puede contener el nombre del recurso para el grupo de identidades para cargas de trabajo o el grupo de personal, así como el identificador del proveedor en ese grupo. | N/A | String | Solo cuando OAuthType=4 |
BYOID_CredentialSource |
La recuperación de tokens y la información del entorno | N/A | String | Solo cuando OAuthType=4 |
BYOID_PoolUserProject |
Es el proyecto de usuario cuando se usa un grupo de personal para la autenticación. | N/A | String | Solo cuando OAuthType=4 y se usa el grupo de personal |
BYOID_SA_Impersonation_Uri |
Es el URI para la identidad temporal como cuenta de servicio cuando se usa un grupo de personal para la autenticación. | N/A | String | Solo cuando OAuthType=4 y se usa el grupo de personal |
BYOID_SubjectTokenType |
Es el token del servicio de tokens de seguridad basado en la especificación de intercambio de tokens.
Uno de los siguientes:
|
urn:ietf:params:oauth:tokentype:id_token |
String | Solo cuando OAuthType=4 |
BYOID_TokenUri |
Es el extremo de intercambio de tokens del servicio de tokens de seguridad. | https://sts.googleapis.com/v1/token |
String | No |
ConnectionPoolSize |
Es el tamaño del grupo de conexiones, si está habilitada la agrupación de conexiones. | 10 |
Largo | No |
DefaultDataset |
Es el conjunto de datos que se usa cuando no se especifica uno en una consulta. | N/A | String | No |
EnableGcpLogExporter |
Determina si el controlador exporta automáticamente los registros a Cloud Logging (si no se usa una instancia de OpenTelemetry personalizada o global). Para obtener más información, consulta OpenTelemetry. | FALSE |
Booleano | No |
EnableGcpTraceExporter |
Determina si el controlador exporta automáticamente los seguimientos a Cloud Trace (si no se usa una instancia de OpenTelemetry personalizada o global). Para obtener más información, consulta OpenTelemetry. | FALSE |
Booleano | No |
EnableHighThroughputAPI |
Determina si se puede usar la API de Storage Read. Las propiedades
HighThroughputActivationRatio y
HighThroughputMinTableSize también se deben establecer en
TRUE para usar la API de Storage Read.
|
FALSE |
Booleano | No |
EnableProjectDiscovery |
Determina si los métodos de metadatos de la base de datos descubren conjuntos de datos en todos los proyectos de Cloud de Confiance accesibles. Cuando se establece en FALSE,
el descubrimiento se restringe al ProjectId predeterminado.
|
FALSE |
Booleano | No |
EnableSession |
Determina si la conexión inicia una sesión. Si se establece en
TRUE, el ID de sesión se pasa a todas las consultas posteriores.
|
FALSE |
Booleano | No |
EnableTimestampPicos |
Determina si el controlador recupera los valores TIMESTAMP(12) con
precisión de picosegundos. Cuando se establece en TRUE,
los valores TIMESTAMP(12) se devuelven como objetos String
con formato UTC mediante los métodos getString() y
getObject(). Cuando se establece en FALSE,
los valores TIMESTAMP(12) se truncan a una precisión de microsegundos
de 6 dígitos. Esta propiedad no es compatible con SQL heredado
(QueryDialect=BIG_QUERY).
|
FALSE |
Booleano | No |
EnableWriteAPI |
Determina si se puede usar la API de Storage Write (gRPC). Debe
establecerse en TRUE para habilitar las inserciones masivas.
|
FALSE |
Booleano | No |
EndpointOverrides |
Extremos personalizados para reemplazar lo siguiente:
|
N/A | Cadena separada por comas | No |
FilterTablesOnDefaultDataset |
Determina el alcance de los metadatos que devuelven los métodos DatabaseMetaData.getTables() y DatabaseMetaData.getColumns(). Cuando se establece en
FALSE, no se aplica ningún filtro. La propiedad DefaultDataset
también se debe configurar para habilitar el filtrado.
|
FALSE |
Booleano | No |
GcpTelemetryCredentials |
Son las credenciales que se usan para autenticar los exportadores de telemetría. Acepta una ruta de acceso a una clave JSON de cuenta de servicio o la cadena JSON sin procesar. Si no se configuran, se usan las credenciales de conexión de forma predeterminada. Para obtener más información, consulta OpenTelemetry. | N/A | String | No |
GcpTelemetryProjectId |
Es el ID del proyecto de destino de Cloud de Confiance by S3NS para la telemetría. La configuración predeterminada es el ProjectId principal. Para obtener más información, consulta
OpenTelemetry.
|
N/A | String | No |
HighThroughputActivationRatio |
Es el umbral de la cantidad de páginas en una respuesta de consulta. Cuando se supera este
número y se cumplen las condiciones EnableHighThroughputAPI y
HighThroughputMinTableSize, el controlador
comienza a usar la API de Storage Read.
|
2 |
Número entero | No |
HighThroughputMinTableSize |
Es el umbral para la cantidad de filas en una respuesta de consulta. Cuando se supera este número
y se cumplen las condiciones EnableHighThroughputAPI y
HighThroughputActivationRatio, el controlador
comienza a usar la API de Storage Read.
|
10000 |
Número entero | No |
JobCreationMode |
Determina si las consultas se ejecutan con o sin trabajos. Un valor 1
significa que se crean trabajos para cada consulta, y un valor 2
significa que las consultas se pueden ejecutar sin trabajos.
|
2 |
Número entero | No |
JobTimeout |
Es el tiempo de espera del trabajo (en segundos) después del cual se cancela el trabajo en el servidor. | 0 |
Largo | No |
KMSKeyName |
Es el nombre de la clave de KMS para encriptar datos. | N/A | String | No |
Labels |
Son las etiquetas asociadas con la consulta para organizar y agrupar los trabajos de consulta. | N/A | Map<String, String> | No |
LargeResultDataset |
Es el conjunto de datos de destino para los resultados de consultas grandes, solo cuando se establece la propiedad
LargeResultTable. Cuando configuras esta propiedad,
las escrituras de datos omiten la caché de resultados y activan la facturación para cada consulta,
incluso si los resultados son pequeños.
|
_google_jdbc |
String | No |
LargeResultsDatasetExpirationTime |
Es el ciclo de vida de todas las tablas en un conjunto de datos de resultados grande, en milisegundos. Esta propiedad se ignora si el conjunto de datos ya tiene un tiempo de vencimiento predeterminado establecido. | 3600000 |
Largo | No |
LargeResultTable |
Es la tabla de destino para los resultados de consultas grandes, solo cuando se establece la propiedad LargeResultDataset. Cuando configuras esta
propiedad, las operaciones de escritura de datos omiten la caché de resultados y activan la facturación para cada
consulta, incluso si los resultados son pequeños.
|
temp_table... |
String | No |
ListenerPoolSize |
Es el tamaño del grupo de objetos de escucha, si la agrupación de conexiones está habilitada. | 10 |
Largo | No |
Location |
Es la ubicación en la que se crean o consultan los conjuntos de datos. BigQuery determina automáticamente la ubicación si no se establece esta propiedad. | N/A | String | No |
LogLevel |
Es el nivel de detalle que registra el controlador. Para obtener más información, consulta Logging. | 0 |
Número entero | No |
LogPath |
Es el directorio en el que se escriben los archivos de registro. | N/A | String | No |
MaximumBytesBilled |
Es el límite de bytes facturados. Las consultas con bytes facturados que superen este número fallarán sin generar cargos. | 0 |
Largo | No |
MaxResults |
Es la cantidad máxima de resultados por página. | 10000 |
Largo | No |
MetaDataFetchThreadCount |
Es la cantidad de subprocesos que se usan para los métodos de metadatos de la base de datos. | 32 |
Número entero | No |
OAuthAccessToken |
Es el token de acceso que se usa para la autenticación con token de acceso pregenerado. | N/A | String | Solo cuando OAUTH_TYPE=2 |
OAuthClientId |
Es el ID de cliente para la autenticación con token de actualización generado previamente y la autenticación de la cuenta de usuario. | N/A | String | Solo cuando OAUTH_TYPE=1 o OAUTH_TYPE=2 |
OAuthClientSecret |
Es el secreto del cliente para la autenticación con token de actualización generado previamente y la autenticación de la cuenta de usuario. | N/A | String | Solo cuando OAUTH_TYPE=1 o OAUTH_TYPE=2 |
OAuthP12Password |
Es la contraseña del archivo de claves PKCS12. | notasecret |
String | No |
OAuthPvtKey |
La clave de la cuenta de servicio cuando se usa la autenticación de cuenta de servicio. Este valor puede ser un objeto de archivo de claves JSON sin procesar o una ruta de acceso al archivo de claves JSON. | N/A | String |
Solo cuando OAUTH_TYPE=0 y el valor OAuthPvtKeyPath no están establecidos
|
OAuthPvtKeyPath |
Es la ruta de acceso a la clave de la cuenta de servicio cuando se usa la autenticación de la cuenta de servicio. | N/A | String |
Solo cuando no se establecen OAUTH_TYPE=0 ni los valores OAuthPvtKey y OAuthServiceAcctEmail
|
OAuthRefreshToken |
Es el token de actualización para la autenticación con token de actualización generado previamente. | N/A | String |
Solo cuando OAUTH_TYPE=2
|
OAuthServiceAcctEmail |
Es el correo electrónico de la cuenta de servicio cuando se usa la autenticación de cuenta de servicio. | N/A | String |
Solo cuando OAUTH_TYPE=0 y el valor OAuthPvtKeyPath no están establecidos
|
OAuthType |
Es el tipo de autenticación. Uno de los siguientes:
|
-1 |
Número entero | Sí |
PartnerToken |
Es un token que usan los socios de Cloud de Confiance para hacer un seguimiento del uso del controlador. | N/A | String | No |
ProjectId |
Es el ID del proyecto predeterminado para el conductor. Este proyecto se usa para ejecutar consultas y se factura por el uso de recursos. Si no se establece, el controlador infiere un ID del proyecto. | N/A | String | No, pero se recomienda |
ProxyHost |
Es el nombre de host o la dirección IP de un servidor proxy a través del cual se enruta la conexión de JDBC. | N/A | String | No |
ProxyPort |
Es el número de puerto en el que el servidor proxy escucha las conexiones. | N/A | String | No |
ProxyPwd |
Es la contraseña para la autenticación cuando se establece la conexión a través de un servidor proxy que la requiere. | N/A | String | No |
ProxyUid |
Es el nombre de usuario para la autenticación cuando se establece la conexión a través de un servidor proxy que lo requiere. | N/A | String | No |
QueryDialect |
Es el dialecto de SQL para la ejecución de consultas. Usa SQL para
GoogleSQL (muy recomendado) y BIG_QUERY para
SQL heredado.
|
SQL |
String | No |
QueryProperties |
Propiedades de conexión de REST que personalizan el comportamiento de las consultas. | N/A | Map<String, String> | No |
RequestGoogleDriveScope |
Agrega el permiso de Drive de solo lectura a la conexión cuando se establece en
1.
|
0 |
Número entero | No |
RetryInitialDelay |
Establece la demora (en segundos) antes del primer reintento. | 0 |
Largo | No |
RetryMaxDelay |
Establece el límite máximo (en segundos) para el retraso del reintento. | 0 |
Largo | No |
ServiceAccountImpersonationChain |
Es una lista separada por comas de los correos electrónicos de las cuentas de servicio en la cadena de robo de identidad. | N/A | String | No |
ServiceAccountImpersonationEmail |
Es el correo electrónico de la cuenta de servicio cuya identidad se usará. | N/A | String | No |
ServiceAccountImpersonationScopes |
Es una lista separada por comas de los permisos de OAuth 2.0 que se usarán con la cuenta cuya identidad se usará. | https://www.googleapis.com/auth/bigquery |
String | No |
ServiceAccountImpersonationTokenLifetime |
Es la duración del token de la cuenta de servicio cuya identidad se usó (en segundos). | 3600 |
Número entero | No |
SSLTrustStore |
Es la ruta de acceso completa al almacén de certificados de confianza de Java que contiene certificados de la autoridad certificadora (AC) de confianza. El controlador usa este almacén de certificados de confianza para validar la identidad del servidor durante el protocolo de enlace SSL/TLS. | N/A | String | No |
SSLTrustStoreProvider |
Es el proveedor de Java Cryptography Extension (JCE) que se usa para la
propiedad SSLTrustStore.
|
N/A | String | No |
SSLTrustStorePwd |
Es la contraseña del almacén de confianza de Java especificado en la
propiedad SSLTrustStore.
|
N/A | String | Solo si el almacén de certificados de confianza de Java está protegido con contraseña |
SSLTrustStoreType |
Es el formato del archivo de almacén de confianza especificado en la
propiedad SSLTrustStore (como JKS,
PKCS12 o ROTKS).
|
N/A | String | No |
SWA_ActivationRowCount |
Es el umbral de filas de executeBatch insert que, cuando se supera, hace que el conector cambie a la
API de Storage Write (gRPC).
|
3 |
Número entero | No |
SWA_AppendRowCount |
Es el tamaño de la transmisión de escritura. | 1000 |
Número entero | No |
Timeout |
Es la cantidad de tiempo, en segundos, que el conector vuelve a intentar una llamada a la API con errores antes de que se agote el tiempo de espera. | 0 |
Largo | No |
UniverseDomain |
Es el dominio de nivel superior que está asociado con los recursos de Cloud de Confiance de tu organización. | googleapis.com |
String | No |
UnsupportedHTAPIFallback |
Determina si el conector recurre a la API de REST (cuando se establece en
TRUE) o devuelve un error (cuando se establece en FALSE).
|
TRUE |
Booleano | No |
UseGlobalOpenTelemetry |
Determina si el controlador usa GlobalOpenTelemetry.get() para
la instrumentación. Para obtener más información, consulta
OpenTelemetry.
|
FALSE |
Booleano | No |
UseQueryCache |
Habilita el almacenamiento en caché de consultas. | TRUE |
Booleano | No |
Ejecuta consultas con el controlador
Con tu aplicación de Java conectada a BigQuery a través del controlador JDBC, ahora puedes ejecutar consultas en tu entorno de desarrollo a través del proceso JDBC estándar. Se aplican todas las cuotas y los límites de BigQuery.
Asignación de tipos de datos
Cuando ejecutas consultas a través del controlador JDBC para BigQuery, se produce la siguiente asignación de tipos de datos:
| Tipo de GoogleSQL | Tipo de 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 |
Ejemplos
En las siguientes secciones, se proporcionan ejemplos en los que se usan las funciones de BigQuery a través del controlador JDBC para BigQuery.
Parámetros posicionales
En el siguiente ejemplo, se ejecuta una consulta con un parámetro posicional:
PreparedStatement preparedStatement = connection.prepareStatement( "SELECT * FROM MyTestTable where testColumn = ?"); preparedStatement.setString(1, "string2"); ResultSet resultSet = statement.executeQuery(selectQuery);
Registros anidados y repetidos
En el siguiente ejemplo, se consulta el registro base de los 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 controlador devuelve el registro base como un objeto de struct o una representación de cadena de un objeto JSON. El resultado es similar al siguiente:
{
"v": {
"f": [
{
"v": "Adam"
},
{
"v": "5"
}
]
}
}En el siguiente ejemplo, se consultan los 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()); }
En el siguiente ejemplo, se consulta un array estándar de datos repetidos y, luego, se verifica el resultado:
// 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]); }
En el siguiente ejemplo, se consulta un array Struct de datos repetidos y, luego, se verifica
el resultado:
// 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]); }
Bulk-insert
En el siguiente ejemplo, se realiza una operación de inserción masiva con el
método 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();
Logging
Para solucionar problemas con el controlador JDBC para BigQuery, puedes habilitar el registro configurando las propiedades de conexión o las variables de entorno. El registro puede afectar el rendimiento y ocupar espacio en el disco, por lo que solo debes habilitarlo de forma temporal para capturar un problema.
Niveles de registro
La propiedad LogLevel determina el nivel de detalle que registra el paquete java.util.logging:
0:OFF(predeterminado)1:SEVERE2:WARNING3:INFO4:CONFIG5:FINE6:FINER7:FINEST8:ALL
Recomendamos el nivel 6 para la solución de problemas generales. Los niveles 7 y 8 se limitan a
las operaciones de ResultSet y generan un gran volumen de registros.
Habilita el registro en la cadena de conexión
Para habilitar el registro en la cadena de conexión, agrega las propiedades de conexión LogLevel y LogPath, por ejemplo:
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=MyTestProject;OAuthType=3;LogLevel=6;LogPath=/tmp/jdbc-logs;
Habilita el registro con variables de entorno
Si tu herramienta para desarrolladores no permite editar la cadena de conexión, también puedes establecer el nivel y la ruta de acceso de los registros con las siguientes variables de entorno antes de ejecutar la aplicación:
BIGQUERY_JDBC_LOG_LEVEL: Es el nivel de registro (del 0 al 8).BIGQUERY_JDBC_LOG_PATH: Es el directorio de los archivos de registro.
Por ejemplo, en un entorno de Linux o macOS, ejecuta lo siguiente:
export BIGQUERY_JDBC_LOG_LEVEL=6
export BIGQUERY_JDBC_LOG_PATH=/tmp/jdbc-logs
OpenTelemetry
El controlador JDBC para BigQuery admite OpenTelemetry (OTel) para proporcionar seguimiento y registro distribuidos, lo que te permite supervisar el rendimiento de tus interacciones con la base de datos y solucionar problemas de manera eficaz.
Operaciones con seguimiento
Cuando OpenTelemetry está habilitado, el controlador genera intervalos para las siguientes operaciones:
- Ejecución de consultas: Se generan intervalos para
BigQueryStatement(execute(),executeQuery(),executeLargeUpdate(),executeBatch()) yBigQueryPreparedStatement(execute(),executeQuery(),executeLargeUpdate()). - Operaciones de metadatos: Se generan intervalos para métodos
DatabaseMetaDataespecíficos (getCatalogs(),getSchemas(),getTables()ygetColumns()). - Paginación: Las recuperaciones asíncronas de páginas adicionales de resultados (cuando se usa
la ruta de la API de REST) se rastrean y se vinculan de forma causal al intervalo de ejecución de la consulta
original con los vínculos de intervalo de OpenTelemetry. Se crea un intervalo llamado
BigQueryStatement.paginationpara estas operaciones. - Propagación del contexto: El controlador de JDBC propaga el contexto activo al
SDK de
google-cloud-bigquerysubyacente. Como resultado, los intervalos que genera el SDK (como las llamadas RPC HTTP) aparecen automáticamente como elementos secundarios de los intervalos de JDBC, lo que proporciona una jerarquía de seguimiento completa de extremo a extremo.
Modos de configuración
Puedes configurar OpenTelemetry en el controlador JDBC con uno de los siguientes modos, según la arquitectura y los requisitos de tu aplicación.
Telemetría administrada por la aplicación
Si tu aplicación ya usa OpenTelemetry, puedes insertar tu instancia de OpenTelemetry en el controlador JDBC para asegurarte de que la telemetría del controlador esté correlacionada con la de tu aplicación.
Para ello, usa la API de BigQueryDataSource:
BigQueryDataSource dataSource = new BigQueryDataSource();
// ... set other properties ...
dataSource.setCustomOpenTelemetry(yourOpenTelemetryInstance);
Compatibilidad global con OpenTelemetry
Si inicializaste OpenTelemetry de forma global en tu aplicación (por ejemplo,
con el agente de Java de OpenTelemetry o llamando a la función GlobalOpenTelemetry.set()), puedes
configurar el controlador para que use esta instancia global.
Para habilitar la instancia global, establece la propiedad de conexión UseGlobalOpenTelemetry en TRUE.
Telemetría Cloud de Confiance sin configuración
Si ejecutas en Cloud de Confiance y quieres una configuración rápida, puedes habilitar la exportación automática de seguimientos y registros a la observabilidad de Cloud de Confiance (Trace y Logging).
Para habilitar esta exportación, establece las siguientes propiedades de conexión en tu URL de JDBC:
EnableGcpTraceExporter=trueEnableGcpLogExporter=true
A continuación, se muestra un ejemplo de URL de conexión:
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=your-project-id;EnableGcpTraceExporter=true;EnableGcpLogExporter=true;
Propiedades de la conexión de OpenTelemetry
Las siguientes propiedades de conexión son compatibles con OpenTelemetry. Para obtener descripciones detalladas y valores predeterminados, consulta Propiedades de conexión.
EnableGcpLogExporterEnableGcpTraceExporterGcpTelemetryCredentialsGcpTelemetryProjectIdUseGlobalOpenTelemetry
Consideraciones importantes
Cuando implementes la integración de OpenTelemetry, ten en cuenta las siguientes consideraciones sobre el comportamiento de los registros, la autenticación, la configuración del proxy y los precios.
Interacción con LogLevel
La propiedad de conexión LogLevel existente actúa como un guardián de acceso principal para
el registro.
- Si se establece
LogLevel=0(DESACTIVADO), no se generan registros. Por lo tanto, no se exportan registros con OpenTelemetry ni a Logging, incluso siEnableGcpLogExporter=true. - Para habilitar el registro de OTel, asegúrate de que
LogLevelesté configurado en un valor mayor que 0 (por ejemplo,5para registros detallados).
Autenticación para la telemetría
La exportación de telemetría (tanto el seguimiento como el registro) con el resguardo automático deCloud de Confiance admite las credenciales predeterminadas de la aplicación (ADC) y las credenciales explícitas de la cuenta de servicio proporcionadas con GcpTelemetryCredentials.
Cuando se proporcionan GcpTelemetryProjectId o GcpTelemetryCredentials, los registros y los seguimientos se envían al mismo proyecto de destino especificado con las mismas credenciales configuradas.
Configuración de proxy con OpenTelemetry y registro
Si tu aplicación se conecta a BigQuery a través de un servidor proxy, el controlador controla el enrutamiento del proxy de la siguiente manera:
- Exportación de seguimientos (HTTP). Cuando usas el protocolo HTTP predeterminado para
la exportación de seguimientos de OpenTelemetry (
otel.exporter.otlp.protocol=http/protobuf), el controlador enruta automáticamente el tráfico de exportación de seguimientos a través del proxy configurado en las propiedades de conexión conProxyHostyProxyPort. Exportación de registros y telemetría de gRPC. El exportador automático de registros de Cloud de Confiance (
EnableGcpLogExporter=true) y los exportadores de OpenTelemetry basados en gRPC (otel.exporter.otlp.protocol=grpc) usan gRPC, que no admite la configuración de proxy por conexión. Para enrutar el tráfico de exportación de registros y telemetría de gRPC a través de un servidor proxy, establece la configuración de proxy a nivel de la JVM con las siguientes propiedades del sistema:-Dhttps.proxyHost=PROXY_HOST -Dhttps.proxyPort=PROXY_PORT
APIs y permisos de IAM obligatorios
Para escribir correctamente datos de telemetría en la observabilidad de Cloud de Confiance by S3NS , realiza la siguiente configuración en tu proyecto de Cloud de Confiance de destino:
- Habilita las APIs:
- Habilita la API de Cloud Trace (
cloudtrace.googleapis.com). - Habilita la API de Cloud Logging (
logging.googleapis.com).
- Habilita la API de Cloud Trace (
- Otorga roles de IAM:
- Para exportar seguimientos, otorga al principal o a la cuenta de servicio el rol de agente de Trace (
roles/cloudtrace.agent). - Para exportar registros, otorga al principal o a la cuenta de servicio el rol de Escritor de registros (
roles/logging.logWriter).
- Para exportar seguimientos, otorga al principal o a la cuenta de servicio el rol de agente de Trace (
Precios y facturación
Cuando usas la telemetría de configuración cero de Cloud de Confiance
(EnableGcpTraceExporter=true o EnableGcpLogExporter=true), los datos de telemetría
se envían a Trace y Logging. Estos servicios pueden generar cargos
según el volumen de datos transferidos. Para obtener más información, consulta
Google Cloud Observability.
Métricas
Esta integración no admite métricas de OpenTelemetry.
Ocultamiento de dependencias
Para evitar conflictos de ruta de clase con tu aplicación, el controlador oculta las dependencias del SDK y del exportador de OpenTelemetry. La API de OpenTelemetry permanece sin sombreado para permitir la interoperabilidad con el SDK que proporciona tu aplicación.
Correlación de registros y seguimientos
Cuando OpenTelemetry está habilitado, el controlador correlaciona automáticamente los registros con los seguimientos:
db.connection_id: Se adjunta como un atributo de intervalo a todos los intervalos de JDBC.jdbc.connection_id: Se usa como una clave de equipaje y se adjunta como una etiqueta a todas las entradas de registro que el controlador emite a Logging.- ID de seguimiento y de intervalo: Los registros generados dentro del alcance de la ejecución de una consulta
incluyen automáticamente el
trace_idy elspan_idactivos.
Precios
Puedes descargar el controlador JDBC para BigQuery sin costo. Sin embargo, cuando usas el controlador, se aplican los precios estándar de BigQuery.
¿Qué sigue?
- Para obtener instrucciones de configuración adicionales, manuales de referencia de propiedades de URL de conexión, muestras de código e instrucciones de compilación local, visita el repositorio de código abierto en GitHub:
- Obtén más información sobre el controlador ODBC para BigQuery.
- Explora otras herramientas para desarrolladores de BigQuery.