Modelo de conetividade de base de dados Java (JDBC) para o BigQuery

O modelo JDBC para BigQuery é um pipeline em lote que copia dados de uma tabela de base de dados relacional para uma tabela do BigQuery existente. Este pipeline usa JDBC para se ligar à base de dados relacional. Use este modelo para copiar dados de qualquer base de dados relacional com controladores JDBC disponíveis para o BigQuery.

Para uma camada adicional de proteção, pode transmitir uma chave do Cloud KMS, juntamente com parâmetros de nome de utilizador, palavra-passe e string de ligação codificados em Base64 encriptados com a chave do Cloud KMS. Para ver detalhes adicionais sobre a encriptação do nome de utilizador, da palavra-passe e dos parâmetros da string de ligação, consulte o ponto final de encriptação da API Cloud KMS.

Requisitos do pipeline

  • Os controladores JDBC para a base de dados relacional têm de estar disponíveis.
  • A tabela do BigQuery tem de existir antes da execução do pipeline.
  • A tabela do BigQuery tem de ter um esquema compatível.
  • A base de dados relacional tem de estar acessível a partir da sub-rede onde o Dataflow é executado.

Parâmetros de modelos

Parâmetros obrigatórios

  • driverJars: a lista separada por vírgulas de ficheiros JAR de controladores. Por exemplo, gs://your-bucket/driver_jar1.jar,gs://your-bucket/driver_jar2.jar.
  • driverClassName: o nome da classe do controlador JDBC. Por exemplo, com.mysql.jdbc.Driver.
  • connectionURL: a string do URL de ligação JDBC. Por exemplo, jdbc:mysql://some-host:3306/sampledb. Pode transmitir este valor como uma string encriptada com uma chave do Cloud KMS e, em seguida, codificada em Base64. Remova os carateres de espaço da string codificada em Base64. Tenha em atenção a diferença entre uma string de ligação à base de dados Oracle não RAC (jdbc:oracle:thin:@some-host:<port>:<sid>) e uma string de ligação à base de dados Oracle RAC (jdbc:oracle:thin:@//some-host[:<port>]/<service_name>). Por exemplo, jdbc:mysql://some-host:3306/sampledb.
  • outputTable: a localização da tabela de saída do BigQuery. Por exemplo, <PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>.
  • bigQueryLoadingTemporaryDirectory: o diretório temporário para o processo de carregamento do BigQuery. Por exemplo, gs://your-bucket/your-files/temp_dir.

Parâmetros opcionais

  • connectionProperties: a string de propriedades a usar para a ligação JDBC. O formato da string tem de ser [propertyName=property;]*.Para mais informações, consulte as propriedades de configuração (https://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html) na documentação do MySQL. Por exemplo, unicode=true;characterEncoding=UTF-8.
  • username: o nome de utilizador a usar para a ligação JDBC. Pode ser transmitido como uma string encriptada com uma chave do Cloud KMS ou pode ser um segredo do Secret Manager no formato projects/{project}/secrets/{secret}/versions/{secret_version}.
  • password: a palavra-passe a usar para a ligação JDBC. Pode ser transmitido como uma string encriptada com uma chave do Cloud KMS ou pode ser um segredo do Secret Manager no formato projects/{project}/secrets/{secret}/versions/{secret_version}.
  • consulta: a consulta a executar na origem para extrair os dados. Tenha em atenção que alguns tipos de SQL JDBC e BigQuery, apesar de partilharem o mesmo nome, têm algumas diferenças. Algumas associações de tipos de SQL -> BigQuery importantes a ter em conta são DATETIME --> TIMESTAMP. A conversão de tipos pode ser necessária se os seus esquemas não corresponderem. Por exemplo, select * from sampledb.sample_table.
  • KMSEncryptionKey: a chave de encriptação do Cloud KMS a usar para desencriptar o nome de utilizador, a palavra-passe e a string de ligação. Se transmitir uma chave do Cloud KMS, também tem de encriptar o nome de utilizador, a palavra-passe e a cadeia de caracteres de ligação. Por exemplo, projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key.
  • useColumnAlias: se estiver definido como true, o pipeline usa o alias da coluna (AS) em vez do nome da coluna para mapear as linhas para o BigQuery. A predefinição é false.
  • isTruncate: se estiver definido como true, o pipeline é truncado antes de carregar dados para o BigQuery. O valor predefinido é false, o que faz com que o pipeline anexe dados.
  • partitionColumn: se partitionColumn for especificado juntamente com table, o JdbcIO lê a tabela em paralelo executando várias instâncias da consulta na mesma tabela (subconsulta) através de intervalos. Atualmente, suporta colunas de partição Long e DateTime. Transmita o tipo de coluna através de partitionColumnType.
  • partitionColumnType: o tipo de partitionColumn, aceita long ou datetime. A predefinição é: long.
  • table: a tabela a partir da qual ler quando usar partições. Este parâmetro também aceita uma subconsulta entre parênteses. Por exemplo, (select id, name from Person) as subq.
  • numPartitions: o número de partições. Com o limite inferior e superior, este valor forma intervalos de partições para expressões de cláusulas WHERE geradas que são usadas para dividir a coluna de partição uniformemente. Quando a entrada é inferior a 1, o número é definido como 1.
  • lowerBound: o limite inferior a usar no esquema de partição. Se não for indicado, este valor é inferido automaticamente pelo Apache Beam para os tipos suportados. datetime partitionColumnType aceita o limite inferior no formato yyyy-MM-dd HH:mm:ss.SSSZ. Por exemplo, 2024-02-20 07:55:45.000+03:30.
  • upperBound: o limite superior a usar no esquema de partição. Se não for indicado, este valor é inferido automaticamente pelo Apache Beam para os tipos suportados. datetime partitionColumnType aceita o limite superior no formato yyyy-MM-dd HH:mm:ss.SSSZ. Por exemplo, 2024-02-20 07:55:45.000+03:30.
  • fetchSize: o número de linhas a obter da base de dados de cada vez. Não é usado para leituras particionadas. A predefinição é: 50000.
  • createDisposition: o CreateDisposition do BigQuery a usar. Por exemplo, CREATE_IF_NEEDED ou CREATE_NEVER. A predefinição é: CREATE_NEVER.
  • bigQuerySchemaPath: o caminho do Cloud Storage para o esquema JSON do BigQuery. Se createDisposition estiver definido como CREATE_IF_NEEDED, este parâmetro tem de ser especificado. Por exemplo, gs://your-bucket/your-schema.json.
  • outputDeadletterTable: a tabela do BigQuery a usar para mensagens que não conseguiram alcançar a tabela de saída, formatada como "PROJECT_ID:DATASET_NAME.TABLE_NAME". Se a tabela não existir, é criada quando o pipeline é executado. Se este parâmetro não for especificado, o pipeline falha em erros de escrita.Este parâmetro só pode ser especificado se useStorageWriteApi ou useStorageWriteApiAtLeastOnce estiver definido como verdadeiro.
  • disabledAlgorithms: algoritmos separados por vírgulas a desativar. Se este valor estiver definido como none, nenhum algoritmo é desativado. Use este parâmetro com cuidado, porque os algoritmos desativados por predefinição podem ter vulnerabilidades ou problemas de desempenho. Por exemplo, SSLv3, RC4.
  • extraFilesToStage: caminhos do Cloud Storage ou Secrets do Secret Manager separados por vírgulas para ficheiros a serem preparados no trabalhador. Estes ficheiros são guardados no diretório /extra_files em cada trabalhador. Por exemplo, gs://<BUCKET_NAME>/file.txt,projects/<PROJECT_ID>/secrets/<SECRET_ID>/versions/<VERSION_ID>.
  • useStorageWriteApi: se true, o pipeline usa a API BigQuery Storage Write (https://cloud.google.com/bigquery/docs/write-api). O valor predefinido é false. Para mais informações, consulte a secção Usar a API Storage Write (https://beam.apache.org/documentation/io/built-in/google-bigquery/#storage-write-api).
  • useStorageWriteApiAtLeastOnce: quando usa a API Storage Write, especifica a semântica de escrita. Para usar a semântica, pelo menos, uma vez (https://beam.apache.org/documentation/io/built-in/google-bigquery/#at-least-once-semantics), defina este parâmetro como true. Para usar a semântica exatamente uma vez, defina o parâmetro como false. Este parâmetro só se aplica quando useStorageWriteApi é true. O valor predefinido é false.

Execute o modelo

Consola

  1. Aceda à página do fluxo de dados Criar tarefa a partir de um modelo.
  2. Aceda a Criar tarefa a partir de modelo
  3. No campo Nome da tarefa, introduza um nome exclusivo para a tarefa.
  4. Opcional: para Ponto final regional, selecione um valor no menu pendente. A região predefinida é us-central1.

    Para ver uma lista das regiões onde pode executar uma tarefa do Dataflow, consulte as localizações do Dataflow.

  5. No menu pendente Modelo do fluxo de dados, selecione the JDBC to BigQuery with BigQuery Storage API support template.
  6. Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
  7. Clique em Executar tarefa.

gcloud

Na shell ou no terminal, execute o modelo:

gcloud dataflow flex-template run JOB_NAME \
    --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/Jdbc_to_BigQuery_Flex \
    --project=PROJECT_ID \
    --region=REGION_NAME \
    --parameters \
       driverJars=DRIVER_JARS,\
       driverClassName=DRIVER_CLASS_NAME,\
       connectionURL=CONNECTION_URL,\
       outputTable=OUTPUT_TABLE,\
       bigQueryLoadingTemporaryDirectory=BIG_QUERY_LOADING_TEMPORARY_DIRECTORY,\

Substitua o seguinte:

  • JOB_NAME: um nome de tarefa exclusivo à sua escolha
  • VERSION: a versão do modelo que quer usar

    Pode usar os seguintes valores:

  • REGION_NAME: a região onde quer implementar a tarefa do Dataflow, por exemplo, us-central1
  • DRIVER_JARS: os caminhos do Cloud Storage separados por vírgulas dos controladores JDBC
  • DRIVER_CLASS_NAME: o nome da classe do controlador JDBC
  • CONNECTION_URL: a string do URL de ligação JDBC.
  • OUTPUT_TABLE: a tabela de saída do BigQuery
  • BIG_QUERY_LOADING_TEMPORARY_DIRECTORY: o diretório temporário para o processo de carregamento do BigQuery

API

Para executar o modelo através da API REST, envie um pedido HTTP POST. Para mais informações sobre a API e os respetivos âmbitos de autorização, consulte projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
   "launchParameter": {
     "jobName": "JOB_NAME",
     "parameters": {
       "driverJars": "DRIVER_JARS",
       "driverClassName": "DRIVER_CLASS_NAME",
       "connectionURL": "CONNECTION_URL",
       "outputTable": "OUTPUT_TABLE",
       "bigQueryLoadingTemporaryDirectory": "BIG_QUERY_LOADING_TEMPORARY_DIRECTORY",
     },
     "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/Jdbc_to_BigQuery_Flex",
     "environment": { "maxWorkers": "10" }
  }
}

Substitua o seguinte:

  • PROJECT_ID: o ID do projeto onde quer executar a tarefa do Dataflow Google Cloud
  • JOB_NAME: um nome de tarefa exclusivo à sua escolha
  • VERSION: a versão do modelo que quer usar

    Pode usar os seguintes valores:

  • LOCATION: a região onde quer implementar a tarefa do Dataflow, por exemplo, us-central1
  • DRIVER_JARS: os caminhos do Cloud Storage separados por vírgulas dos controladores JDBC
  • DRIVER_CLASS_NAME: o nome da classe do controlador JDBC
  • CONNECTION_URL: a string do URL de ligação JDBC.
  • OUTPUT_TABLE: a tabela de saída do BigQuery
  • BIG_QUERY_LOADING_TEMPORARY_DIRECTORY: o diretório temporário para o processo de carregamento do BigQuery

O que se segue?