Usar o driver JDBC para BigQuery
O driver Java Database Connectivity (JDBC) para BigQuery conecta seus aplicativos Java ao BigQuery, permitindo que você use os recursos do BigQuery com as ferramentas e a infraestrutura de sua preferência. Para conectar aplicativos que não são Java ao BigQuery, use o driver Open Database Connectivity (ODBC) para BigQuery.
Limitações
O driver JDBC para BigQuery está sujeito às seguintes limitações:
- O driver é específico do BigQuery e não pode ser usado com outros produtos ou serviços.
- O tipo de dados
INTERVALnão é compatível com a API BigQuery Storage Read. - Todas as limitações da linguagem de manipulação de dados (DML) se aplicam.
Antes de começar
- Verifique se você conhece os drivers JDBC, o Apache Maven e o
pacote
java.sql. - Verifique se o sistema está configurado com o Java Runtime Environment (JRE) 8.0 ou mais recente. Para saber como verificar sua versão do JRE, consulte Como verificar o ambiente do JRE.
Autentique-se no BigQuery e anote as informações a seguir, que serão usadas posteriormente quando você estabelecer uma conexão com o driver JDBC para BigQuery. Você só precisa anotar as informações que correspondem 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 E-mail da conta de serviço bq-jdbc-sa@mytestproject.s3ns.iam.gserviceaccount.comOAuthServiceAcctEmailChave da conta de serviço (objeto JSON) my-sa-keyOAuthPvtKeyArquivo de chave da conta de serviço Arquivo de chave da conta de serviço (caminho completo) path/to/file/secret.jsonOAuthPvtKeyPathConta de usuário do Google ID do cliente 123-abc.apps.googleusercontent.comOAuthClientIdChave secreta do cliente _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecretToken de acesso pré-gerado Token de acesso ya29.a0AfH6SMCiH1L-x_yZOAuthAccessTokenToken de atualização pré-gerado Token de atualização 1/fFAGRNJru1FTz70BzhT3ZgOAuthRefreshTokenID do cliente 123-abc.apps.googleusercontent.comOAuthClientIdChave secreta do cliente _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecretApplication Default Credentials Nenhum N/A N/A Arquivo de configuração Arquivo de configuração (objeto JSON ou caminho completo) path/to/file/secret.jsonOAuthPvtKeyObjeto de configuração de conta externa Objeto de configuração da conta external_account_configuration_objectOAuthPvtKeyOutro Propriedade de público-alvo do arquivo de configuração da conta externa //iam.googleapis.com/projects/my-project/locations/US-EAST1/workloadIdentityPools/my-pool-/providers/my-providerBYOID_AudienceUriRecuperação de token e arquivo de informações ambientais {\"file\":\"/path/to/file\"}BYOID_CredentialSourceProjeto do usuário (somente se estiver usando um pool de força de trabalho) my_projectBYOID_PoolUserProjectURI para identidade temporária de conta de serviço (somente se estiver usando um pool de colaboradores) my-saBYOID_SA_Impersonation_UriToken do Security Token Service com base na especificação de troca de tokens urn:ietf:params:oauth:tokentype:id_tokenBYOID_SubjectTokenTypeEndpoint de troca de tokens do Security Token Service https://sts.googleapis.com/v1/tokenBYOID_TokenUri
Instalar e configurar o driver JDBC
É possível instalar e configurar o driver JDBC para o BigQuery fazendo o download direto do arquivo uber-JAR ou usando o Maven.
Configuração de download direto
Para configurar o driver JDBC por download direto, faça o seguinte:
- Faça o download da versão 1.6.0 do driver.
- Copie o arquivo baixado para o local especificado pelo software.
Para informações sobre mudanças de recursos e atualizações de fluxo de trabalho, consulte o registro de alterações.
Configuração do Maven
O driver JDBC para BigQuery está disponível no Maven Central.
Para configurar o ambiente de desenvolvimento com o driver JDBC, adicione o driver como uma dependência ao projeto:
Maven
Adicione a seguinte dependência ao arquivo
pom.xml:
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-bigquery-jdbc</artifactId> <version>1.6.0</version> </dependency>
Maven usando uber-JAR
Adicione a seguinte dependência ao arquivo
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
Adicione a instrução a seguir ao seu arquivo build.gradle:
dependencies { // ... other dependencies implementation("com.google.cloud:google-cloud-bigquery-jdbc:1.6.0") }
Estabelecer uma conexão
Para estabelecer uma conexão entre o aplicativo Java e o BigQuery com o driver JDBC para BigQuery, faça o seguinte:
Identifique sua string de conexão para o driver JDBC do BigQuery. Essa string captura todas as informações necessárias para estabelecer uma conexão entre o aplicativo Java e o BigQuery. A string de conexão tem o seguinte formato:
jdbc:bigquery://HOST:PORT;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;AUTH_PROPS;OTHER_PROPS
Substitua:
HOST: o DNS ou o endereço IP do servidor.PORT: o número da porta TCP.PROJECT_ID: o ID do projeto do BigQuery.AUTH_TYPE: um número que especifica o tipo de autenticação que você usou. Uma das seguintes opções:0: para autenticação de conta de serviço (padrão e arquivo de chave)1: para autenticação da Conta do Google do usuário2: para autenticação de token de acesso ou atualização pré-gerado.3: para autenticação do Application Default Credentials4: para outros métodos de autenticação
AUTH_PROPS: as informações de autenticação que você anotou ao autenticar no BigQuery, listadas no formatoproperty_1=value_1; property_2=value_2;.... Por exemplo,OAuthPvtKeyPath=path/to/file/secret.json, se você tiver feito a autenticação com um arquivo de chave de conta de serviço.OTHER_PROPS(opcional): propriedades de conexão adicionais para o driver JDBC, listadas no formatoproperty_1=value_1; property_2=value_2;.... Para uma lista completa de propriedades de conexão, consulte Propriedades de conexão.
Conecte seu aplicativo Java ao driver JDBC do BigQuery com a classe
DriverManagerouDataSource.Conecte-se com a classe
DriverManager:import java.sql.Connection; import java.sql.DriverManager; private static Connection getJdbcConnectionDM(){ Connection connection = DriverManager.getConnection(CONNECTION_STRING); return connection; }
Substitua
CONNECTION_STRINGpela string de conexão da etapa anterior.Conecte-se com a classe
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; }
Substitua
CONNECTION_STRINGpela string de conexão da etapa anterior.A classe
DataSourcetambém tem métodos setter que podem ser usados para definir propriedades de conexão, em vez de incluí-las na string de conexão. Confira o seguinte exemplo: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(); }
Propriedades da conexão
As propriedades de conexão do driver JDBC são parâmetros de configuração que você inclui na string de conexão ou transmite por métodos setter ao estabelecer uma conexão com um banco de dados. As seguintes propriedades de conexão são compatíveis com o driver JDBC para BigQuery.
| 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 |
AllowLargeResults |
Determina se o driver processa resultados de consulta 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 consulta grandes.
|
TRUE |
Booleano | Não |
BYOID_AudienceUri |
A propriedade de público-alvo em um arquivo de configuração de conta externa. A propriedade de público-alvo pode conter o nome do recurso do pool de identidades de carga de trabalho ou do pool de colaboradores, bem como o identificador do provedor nesse pool. | N/A | String | Somente quando OAuthType=4 |
BYOID_CredentialSource |
A recuperação de tokens e as informações ambientais. | N/A | String | Somente quando OAuthType=4 |
BYOID_PoolUserProject |
O projeto do usuário quando um pool de colaboradores está sendo usado para autenticação. | N/A | String | Somente quando OAuthType=4 e usando o pool de força de trabalho |
BYOID_SA_Impersonation_Uri |
O URI para a identidade temporária de conta de serviço quando um pool de colaboradores está sendo usado para autenticação. | N/A | String | Somente quando OAuthType=4 e usando o pool de força de trabalho |
BYOID_SubjectTokenType |
O token do Security Token Service com base na especificação de troca de tokens.
Uma das seguintes opções:
|
urn:ietf:params:oauth:tokentype:id_token |
String | Somente quando OAuthType=4 |
BYOID_TokenUri |
O endpoint de troca de tokens do Security Token Service. | https://sts.googleapis.com/v1/token |
String | Não |
ConnectionPoolSize |
O tamanho do pool de conexões, se o agrupamento de conexões estiver ativado. | 10 |
Longo | Não |
DefaultDataset |
O conjunto de dados usado quando não é especificado um em uma consulta. | N/A | String | Não |
EnableGcpLogExporter |
Determina se o driver exporta automaticamente os registros para o Cloud Logging (se nenhuma instância personalizada ou global do OpenTelemetry for usada). Para mais informações, consulte OpenTelemetry. | FALSE |
Booleano | Não |
EnableGcpTraceExporter |
Determina se o driver exporta traces automaticamente para o Cloud Trace (se nenhuma instância personalizada ou global do OpenTelemetry for usada). Para mais informações, consulte OpenTelemetry. | FALSE |
Booleano | Não |
EnableHighThroughputAPI |
Determina se a API Storage Read pode ser usada. As propriedades
HighThroughputActivationRatio e
HighThroughputMinTableSize também precisam ser definidas como
TRUE para usar a API Storage Read.
|
FALSE |
Booleano | Não |
EnableProjectDiscovery |
Determina se os métodos de metadados do banco de dados descobrem conjuntos de dados em todos os projetos do Cloud de Confiance acessíveis. Quando definido como FALSE,
a descoberta é restrita ao ProjectId padrão.
|
FALSE |
Booleano | Não |
EnableSession |
Determina se a conexão inicia uma sessão. Se definido como
TRUE, o ID da sessão será transmitido para todas as consultas subsequentes.
|
FALSE |
Booleano | Não |
EnableTimestampPicos |
Determina se o driver recupera valores TIMESTAMP(12) com
precisão de picossegundos. Quando definido como TRUE,
os valores TIMESTAMP(12) são retornados como objetos String
formatados em UTC pelos métodos getString() e
getObject(). Quando definido como FALSE,
os valores de TIMESTAMP(12) são truncados para uma precisão de microssegundos
de seis dígitos. Essa propriedade não é compatível com o SQL legado
(QueryDialect=BIG_QUERY).
|
FALSE |
Booleano | Não |
EnableWriteAPI |
Determina se a API Storage Write (gRPC) pode ser usada. Ele precisa ser
definido como TRUE para ativar as inserções em massa.
|
FALSE |
Booleano | Não |
EndpointOverrides |
Endpoints personalizados para substituir o seguinte:
|
N/A | String separada por vírgulas | Não |
FilterTablesOnDefaultDataset |
Determina o escopo dos metadados retornados pelos métodos
DatabaseMetaData.getTables() e
DatabaseMetaData.getColumns(). Quando definido como
FALSE, nenhuma filtragem ocorre. A propriedade DefaultDataset
também precisa ser definida para ativar a filtragem.
|
FALSE |
Booleano | Não |
GcpTelemetryCredentials |
As credenciais usadas para autenticar exportadores de telemetria. Aceita um caminho para uma chave JSON de conta de serviço ou a string JSON bruta. O padrão será as credenciais de conexão se não for definido. Para mais informações, consulte OpenTelemetry. | N/A | String | Não |
GcpTelemetryProjectId |
O ID do projeto de destino do Cloud de Confiance by S3NS para telemetria. O padrão é o ProjectId principal. Para mais informações, consulte
OpenTelemetry.
|
N/A | String | Não |
HighThroughputActivationRatio |
O limite para o número de páginas em uma resposta de consulta. Quando esse
número é excedido e as condições EnableHighThroughputAPI e
HighThroughputMinTableSize são atendidas, o driver
começa a usar a API Storage Read.
|
2 |
Inteiro | Não |
HighThroughputMinTableSize |
O limite para o número de linhas em uma resposta de consulta. Quando esse número
é excedido e as condições EnableHighThroughputAPI e
HighThroughputActivationRatio são atendidas, o driver
começa a usar a API Storage Read.
|
10000 |
Inteiro | Não |
JobCreationMode |
Determina se as consultas são executadas com ou sem jobs. Um valor 1
significa que os jobs são criados para cada consulta, e um valor 2
significa que as consultas podem ser executadas sem jobs.
|
2 |
Inteiro | Não |
JobTimeout |
O tempo limite do job (em segundos) após o qual o job é cancelado no servidor. | 0 |
Longo | Não |
KMSKeyName |
O nome da chave do KMS para criptografar dados. | N/A | String | Não |
Labels |
Rótulos associados à consulta para organizar e agrupar jobs de consulta. | N/A | Map<String, String> | Não |
LargeResultDataset |
O conjunto de dados de destino para resultados de consultas grandes, somente quando a
propriedade LargeResultTable está definida. Quando você define essa propriedade,
as gravações de dados ignoram o cache de resultados e acionam o faturamento para cada consulta,
mesmo que os resultados sejam pequenos.
|
_google_jdbc |
String | Não |
LargeResultsDatasetExpirationTime |
O ciclo de vida de todas as tabelas em um grande conjunto de dados de resultados, em milissegundos. Essa propriedade será ignorada se o conjunto de dados já tiver um tempo de expiração padrão definido. | 3600000 |
Longo | Não |
LargeResultTable |
A tabela de destino para resultados de consultas grandes, somente quando a
propriedade LargeResultDataset está definida. Quando você define essa
propriedade, as gravações de dados ignoram o cache de resultados e acionam o faturamento de cada
consulta, mesmo que os resultados sejam pequenos.
|
temp_table... |
String | Não |
ListenerPoolSize |
O tamanho do pool de listeners, se o pool de conexões estiver ativado. | 10 |
Longo | Não |
Location |
O local em que os conjuntos de dados são criados ou consultados. O BigQuery determina automaticamente o local se essa propriedade não estiver definida. | N/A | String | Não |
LogLevel |
O nível de detalhe registrado pelo driver. Para mais informações, consulte Logging. | 0 |
Inteiro | Não |
LogPath |
O diretório em que os arquivos de registro são gravados. | N/A | String | Não |
MaximumBytesBilled |
O limite de bytes faturados. As consultas com bytes faturados maiores que esse número falham sem gerar cobranças. | 0 |
Longo | Não |
MaxResults |
O número máximo de resultados por página. | 10000 |
Longo | Não |
MetaDataFetchThreadCount |
O número de linhas de execução usadas para métodos de metadados do banco de dados. | 32 |
Inteiro | Não |
OAuthAccessToken |
O token de acesso usado para autenticação de token de acesso pré-gerado. | N/A | String | Somente quando OAUTH_TYPE=2 |
OAuthClientId |
O ID do cliente para autenticação de token de atualização pré-gerado e autenticação de conta de usuário. | N/A | String | Somente quando OAUTH_TYPE=1 ou OAUTH_TYPE=2 |
OAuthClientSecret |
A chave secreta do cliente para autenticação de token de atualização pré-gerado e autenticação de conta de usuário. | N/A | String | Somente quando OAUTH_TYPE=1 ou OAUTH_TYPE=2 |
OAuthP12Password |
A senha do arquivo de chave PKCS12. | notasecret |
String | Não |
OAuthPvtKey |
A chave da conta de serviço ao usar a autenticação da conta de serviço. Esse valor pode ser um objeto de arquivo de chave JSON bruto ou um caminho para o arquivo de chave JSON. | N/A | String |
Somente quando OAUTH_TYPE=0 e o valor OAuthPvtKeyPath
não estão definidos
|
OAuthPvtKeyPath |
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 OAUTH_TYPE=0 e os valores OAuthPvtKey e
OAuthServiceAcctEmail não estão definidos
|
OAuthRefreshToken |
O token de atualização para autenticação de token de atualização pré-gerado. | N/A | String |
Somente quando OAUTH_TYPE=2
|
OAuthServiceAcctEmail |
O e-mail da conta de serviço ao usar a autenticação da conta de serviço. | N/A | String |
Somente quando OAUTH_TYPE=0 e o valor OAuthPvtKeyPath
não estão definidos
|
OAuthType |
O tipo de autenticação. Uma das seguintes opções:
|
-1 |
Inteiro | Sim |
PartnerToken |
Um token usado pelos parceiros do Cloud de Confiance para rastrear o uso do driver. | N/A | String | Não |
ProjectId |
O ID do projeto padrão para o driver. Esse projeto é usado para executar consultas e é cobrado pelo uso de recursos. Se não for definido, o driver vai inferir um ID do projeto. | N/A | String | Não, mas é altamente recomendável |
ProxyHost |
O nome do host ou o endereço IP de um servidor proxy pelo qual a conexão JDBC é roteada. | N/A | String | Não |
ProxyPort |
O número da porta em que o servidor proxy está detectando conexões. | N/A | String | Não |
ProxyPwd |
A senha de autenticação ao se conectar por um servidor proxy que a exige. | N/A | String | Não |
ProxyUid |
O nome de usuário para autenticação ao se conectar por um servidor proxy que exige isso. | N/A | String | Não |
QueryDialect |
O dialeto SQL para execução de consultas. Use SQL para
GoogleSQL (altamente recomendado) e BIG_QUERY para
SQL legado.
|
SQL |
String | Não |
QueryProperties |
Propriedades de conexão REST que personalizam o comportamento da consulta. | N/A | Map<String, String> | Não |
RequestGoogleDriveScope |
Adiciona o escopo somente leitura do Drive à conexão quando definido como
1.
|
0 |
Inteiro | Não |
RetryInitialDelay |
Define o atraso (em segundos) antes da primeira nova tentativa. | 0 |
Longo | Não |
RetryMaxDelay |
Define o limite máximo (em segundos) para o atraso de nova tentativa. | 0 |
Longo | Não |
ServiceAccountImpersonationChain |
Uma lista separada por vírgulas de e-mails de conta de serviço na cadeia de representação. | N/A | String | Não |
ServiceAccountImpersonationEmail |
O e-mail da conta de serviço a ser representada. | N/A | String | Não |
ServiceAccountImpersonationScopes |
Uma lista separada por vírgulas de escopos do OAuth2 para usar com a conta personificada. | https://www.googleapis.com/auth/bigquery |
String | Não |
ServiceAccountImpersonationTokenLifetime |
A vida útil do token da conta representada (em segundos). | 3600 |
Inteiro | Não |
SSLTrustStore |
O caminho completo para o TrustStore do Java que contém certificados de autoridade certificadora (CA) confiáveis. O driver usa esse truststore para validar a identidade do servidor durante o handshake de SSL/TLS. | N/A | String | Não |
SSLTrustStoreProvider |
O provedor da extensão de criptografia Java (JCE, na sigla em inglês) usado para a propriedade SSLTrustStore.
|
N/A | String | Não |
SSLTrustStorePwd |
A senha do Java TrustStore especificada na propriedade SSLTrustStore.
|
N/A | String | Somente se o TrustStore do Java estiver protegido por senha |
SSLTrustStoreType |
O formato do arquivo de truststore especificado na propriedade SSLTrustStore (como JKS, PKCS12 ou ROTKS).
|
N/A | String | Não |
SWA_ActivationRowCount |
O limite de linhas executeBatch insert que, quando excedido, faz com que o conector mude para a API Storage Write (gRPC).
|
3 |
Inteiro | Não |
SWA_AppendRowCount |
O tamanho do stream de gravação. | 1000 |
Inteiro | Não |
Timeout |
O período, em segundos, em que o conector tenta novamente uma chamada de API com falha antes de atingir o tempo limite. | 0 |
Longo | Não |
UniverseDomain |
O domínio de nível superior associado aos recursos do Cloud de Confiance da sua organização. | googleapis.com |
String | Não |
UnsupportedHTAPIFallback |
Determina se o conector volta para a API REST (quando definido como
TRUE) ou retorna um erro (quando definido como FALSE).
|
TRUE |
Booleano | Não |
UseGlobalOpenTelemetry |
Determina se o driver usa GlobalOpenTelemetry.get() para
instrumentação. Para mais informações, consulte
OpenTelemetry.
|
FALSE |
Booleano | Não |
UseQueryCache |
Ativa o armazenamento em cache de consultas. | TRUE |
Booleano | Não |
Executar consultas com o driver
Com o aplicativo Java conectado ao BigQuery pelo driver JDBC, agora é possível executar consultas no ambiente de desenvolvimento usando o processo JDBC padrão. Todas as cotas e limites do BigQuery se aplicam.
Mapeamento de tipo de dados
Quando você executa consultas pelo driver JDBC para o BigQuery, ocorre o seguinte mapeamento de tipo de dados:
| Tipo do GoogleSQL | Tipo 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 |
Exemplos
As seções a seguir mostram exemplos que usam recursos do BigQuery com o driver JDBC para BigQuery.
Parâmetros posicionais
O exemplo a seguir executa uma consulta com um parâmetro posicional:
PreparedStatement preparedStatement = connection.prepareStatement( "SELECT * FROM MyTestTable where testColumn = ?"); preparedStatement.setString(1, "string2"); ResultSet resultSet = statement.executeQuery(selectQuery);
Registros aninhados e repetidos
O exemplo a seguir consulta o registro base de dados 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());
O driver retorna o registro base como um objeto struct ou uma representação de string de um objeto JSON. O resultado será semelhante ao seguinte:
{
"v": {
"f": [
{
"v": "Adam"
},
{
"v": "5"
}
]
}
}O exemplo a seguir consulta os subcomponentes de um 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()); }
O exemplo a seguir consulta uma matriz padrão de dados repetidos e, em seguida, verifica o 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]); }
O exemplo a seguir consulta uma matriz Struct de dados repetidos e, em seguida, verifica
o 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]); }
Inserção em massa
O exemplo a seguir executa uma operação de inserção em massa com o
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 resolver problemas com o driver JDBC para BigQuery, ative a geração de registros definindo propriedades de conexão ou variáveis de ambiente. A geração de registros pode afetar o desempenho e ocupar espaço em disco. Por isso, ative-a apenas temporariamente para capturar um problema.
Níveis de registro
A propriedade LogLevel determina o nível de detalhe registrado pelo pacote java.util.logging:
0:OFF(padrão)1:SEVERE2:WARNING3:INFO4:CONFIG5:FINE6:FINER7:FINEST8:ALL
Recomendamos o nível 6 para solução de problemas gerais. Os níveis 7 e 8 são limitados a operações ResultSet e geram um grande volume de registros.
Ativar a geração de registros na string de conexão
Para ativar a geração de registros na string de conexão, adicione as propriedades de conexão LogLevel e LogPath, por exemplo:
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=MyTestProject;OAuthType=3;LogLevel=6;LogPath=/tmp/jdbc-logs;
Ativar a geração de registros com variáveis de ambiente
Se a ferramenta para desenvolvedores não permitir edições de string de conexão, você também poderá definir o nível e o caminho do registro com as seguintes variáveis de ambiente antes de executar o aplicativo:
BIGQUERY_JDBC_LOG_LEVEL: o nível do registro (0 a 8).BIGQUERY_JDBC_LOG_PATH: o diretório dos arquivos de registro.
Por exemplo, em um ambiente Linux ou macOS, execute o seguinte:
export BIGQUERY_JDBC_LOG_LEVEL=6
export BIGQUERY_JDBC_LOG_PATH=/tmp/jdbc-logs
OpenTelemetry
O driver JDBC para BigQuery é compatível com o OpenTelemetry (OTel) para fornecer rastreamento e geração de registros distribuídos, o que permite monitorar o desempenho das interações do banco de dados e resolver problemas de maneira eficaz.
Operações rastreadas
Quando o OpenTelemetry está ativado, o driver gera períodos para as seguintes operações:
- Execução de consulta: os períodos são gerados para
BigQueryStatement(execute(),executeQuery(),executeLargeUpdate(),executeBatch()) eBigQueryPreparedStatement(execute(),executeQuery(),executeLargeUpdate()). - Operações de metadados: os períodos são gerados para métodos
DatabaseMetaDataespecíficos (getCatalogs(),getSchemas(),getTables(),getColumns()). - Paginação: as buscas assíncronas de outras páginas de resultados (ao usar
o caminho da API REST) são rastreadas e vinculadas causalmente ao período de execução da consulta
original usando os links de período do OpenTelemetry. Um período chamado
BigQueryStatement.paginationé criado para essas operações. - Propagação de contexto: o driver JDBC propaga o contexto ativo para o SDK do
google-cloud-bigquery. Como resultado, os períodos gerados pelo SDK (como chamadas RPC HTTP) aparecem automaticamente como filhos dos períodos do JDBC, fornecendo uma hierarquia de trace completa de ponta a ponta.
Modos de configuração
É possível configurar o OpenTelemetry no driver JDBC usando um dos seguintes modos, dependendo da arquitetura e dos requisitos do aplicativo.
Telemetria gerenciada por aplicativo
Se o aplicativo já usa o OpenTelemetry, é possível injetar a instância do OpenTelemetry no driver JDBC para garantir que a telemetria do driver esteja correlacionada com a telemetria do aplicativo.
Para isso, use a API BigQueryDataSource:
BigQueryDataSource dataSource = new BigQueryDataSource();
// ... set other properties ...
dataSource.setCustomOpenTelemetry(yourOpenTelemetryInstance);
Suporte global ao OpenTelemetry
Se você inicializou o OpenTelemetry globalmente no aplicativo (por exemplo,
usando o agente Java do OpenTelemetry ou chamando a função GlobalOpenTelemetry.set()), é possível
configurar o driver para usar essa instância global.
Para ativar a instância global, defina a propriedade de conexão UseGlobalOpenTelemetry como TRUE.
Telemetria Cloud de Confiance sem configuração
Se você estiver executando no Cloud de Confiance e quiser uma configuração rápida, ative a exportação automática de traces e registros para a observabilidade do Cloud de Confiance (Trace e Logging).
Para ativar essa exportação, defina as seguintes propriedades de conexão no URL JDBC:
EnableGcpTraceExporter=trueEnableGcpLogExporter=true
Veja a seguir um exemplo de URL de conexão:
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=your-project-id;EnableGcpTraceExporter=true;EnableGcpLogExporter=true;
Propriedades da conexão do OpenTelemetry
As propriedades de conexão a seguir são compatíveis com o OpenTelemetry. Para descrições detalhadas e valores padrão, consulte Propriedades de conexão.
EnableGcpLogExporterEnableGcpTraceExporterGcpTelemetryCredentialsGcpTelemetryProjectIdUseGlobalOpenTelemetry
Considerações importantes
Ao implantar a integração do OpenTelemetry, lembre-se das seguintes considerações sobre o comportamento de geração de registros, a autenticação, a configuração de proxy e os preços.
Interação com LogLevel
A propriedade de conexão LogLevel atual atua como um guardião principal para
a geração de registros.
- Se
LogLevel=0(OFF) estiver definido, nenhum registro será gerado. Consequentemente, nenhum registro é exportado usando o OpenTelemetry ou para o Logging, mesmo queEnableGcpLogExporter=true. - Para ativar a geração de registros do OTel, verifique se
LogLevelestá definido como um valor maior que 0 (por exemplo,5para registros detalhados).
Autenticação para telemetria
A exportação de telemetria (rastreamento e geração de registros) com o fallback automático
Cloud de Confiance é compatível com o Application Default Credentials
(ADC) e com as credenciais explícitas da conta de serviço fornecidas usando
GcpTelemetryCredentials.
Quando GcpTelemetryProjectId ou GcpTelemetryCredentials são fornecidos, os registros e os traces são enviados para o mesmo projeto de destino especificado usando as mesmas credenciais configuradas.
Configuração de proxy com OpenTelemetry e geração de registros
Se o aplicativo se conectar ao BigQuery por um servidor proxy, o driver vai processar o roteamento de proxy da seguinte maneira:
- Exportação de trace (HTTP). Quando você usa o protocolo HTTP padrão para
exportação de traces do OpenTelemetry (
otel.exporter.otlp.protocol=http/protobuf), o driver roteia automaticamente o tráfego de exportação de traces pelo proxy configurado nas propriedades de conexão usandoProxyHosteProxyPort. Exportação de registros e telemetria gRPC. O exportador de registros automático do Cloud de Confiance (
EnableGcpLogExporter=true) e os exportadores do OpenTelemetry baseados em gRPC (otel.exporter.otlp.protocol=grpc) usam gRPC, que não oferece suporte à configuração de proxy por conexão. Para rotear o tráfego de exportação de registros e telemetria gRPC por um servidor proxy, defina as configurações de proxy no nível da JVM usando as seguintes propriedades do sistema:-Dhttps.proxyHost=PROXY_HOST -Dhttps.proxyPort=PROXY_PORT
APIs e permissões do IAM necessárias
Para gravar dados de telemetria na observabilidade do Cloud de Confiance by S3NS , faça a seguinte configuração no projeto de destino do Cloud de Confiance :
- Ative as APIs:
- Ative a API Cloud Trace (
cloudtrace.googleapis.com). - Ative a API Cloud Logging (
logging.googleapis.com).
- Ative a API Cloud Trace (
- Conceda papéis do IAM:
- Para exportar traces: conceda ao principal ou à conta de serviço o papel de agente do Trace (
roles/cloudtrace.agent). - Para exportar registros: conceda ao principal ou à conta de serviço o papel de Gravador de registros (
roles/logging.logWriter).
- Para exportar traces: conceda ao principal ou à conta de serviço o papel de agente do Trace (
Preços e faturamento
Ao usar a telemetria de configuração zero do Cloud de Confiance
(EnableGcpTraceExporter=true ou EnableGcpLogExporter=true), os dados de telemetria
são enviados para o Trace e o Logging. Esses serviços podem gerar cobranças
com base no volume de dados ingeridos. Para mais informações, consulte
Google Cloud Observability.
Métricas
Essa integração não é compatível com as métricas do OpenTelemetry.
Sombreamento de dependência
Para evitar conflitos de caminho de classe com o aplicativo, o driver oculta as dependências do SDK e do exportador do OpenTelemetry. A API OpenTelemetry permanece sem sombreamento para permitir a interoperabilidade com o SDK fornecido pelo aplicativo.
Correlação de registros e traces
Quando o OpenTelemetry está ativado, o driver correlaciona automaticamente os registros com os traces:
db.connection_id: anexado como um atributo de período a todos os períodos do JDBC.jdbc.connection_id: usado como uma chave de bagagem e anexado como um rótulo a todas as entradas de registro emitidas pelo driver para o Logging.- ID do trace e ID do período: os registros gerados no escopo de uma execução de consulta incluem automaticamente os
trace_idespan_idativos.
Preços
É possível baixar o driver JDBC para BigQuery sem custo financeiro. No entanto, ao usar o driver, os preços padrão do BigQuery são aplicados.
A seguir
- Para mais instruções de configuração, manuais de referência de propriedades de URL de conexão, exemplos de código e instruções de build local, acesse o repositório de código aberto no GitHub:
- Saiba mais sobre o driver ODBC para BigQuery.
- Conheça outras ferramentas para desenvolvedores do BigQuery.