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 comtable
, 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çãoLong
eDateTime
. Transmita o tipo de coluna através departitionColumnType
. - partitionColumnType: o tipo de
partitionColumn
, aceitalong
oudatetime
. 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 a1
, o número é definido como1
. - 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 formatoyyyy-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 formatoyyyy-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
ouCREATE_NEVER
. A predefinição é: CREATE_NEVER. - bigQuerySchemaPath: o caminho do Cloud Storage para o esquema JSON do BigQuery. Se
createDisposition
estiver definido comoCREATE_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 seuseStorageWriteApi
ouuseStorageWriteApiAtLeastOnce
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 comofalse
. Este parâmetro só se aplica quandouseStorageWriteApi
étrue
. O valor predefinido éfalse
.
Execute o modelo
Consola
- Aceda à página do fluxo de dados Criar tarefa a partir de um modelo. Aceda a Criar tarefa a partir de modelo
- No campo Nome da tarefa, introduza um nome exclusivo para a tarefa.
- 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.
- No menu pendente Modelo do fluxo de dados, selecione the JDBC to BigQuery with BigQuery Storage API support template.
- Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
- 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 escolhaVERSION
: a versão do modelo que quer usarPode usar os seguintes valores:
latest
para usar a versão mais recente do modelo, que está disponível na pasta principal sem data no contentor: gs://dataflow-templates-REGION_NAME/latest/- o nome da versão, como
2023-09-12-00_RC00
, para usar uma versão específica do modelo, que pode ser encontrada aninhada na pasta principal com a data correspondente no contentor: gs://dataflow-templates-REGION_NAME/
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 JDBCDRIVER_CLASS_NAME
: o nome da classe do controlador JDBCCONNECTION_URL
: a string do URL de ligação JDBC.OUTPUT_TABLE
: a tabela de saída do BigQueryBIG_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 CloudJOB_NAME
: um nome de tarefa exclusivo à sua escolhaVERSION
: a versão do modelo que quer usarPode usar os seguintes valores:
latest
para usar a versão mais recente do modelo, que está disponível na pasta principal sem data no contentor: gs://dataflow-templates-REGION_NAME/latest/- o nome da versão, como
2023-09-12-00_RC00
, para usar uma versão específica do modelo, que pode ser encontrada aninhada na pasta principal com a data correspondente no contentor: gs://dataflow-templates-REGION_NAME/
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 JDBCDRIVER_CLASS_NAME
: o nome da classe do controlador JDBCCONNECTION_URL
: a string do URL de ligação JDBC.OUTPUT_TABLE
: a tabela de saída do BigQueryBIG_QUERY_LOADING_TEMPORARY_DIRECTORY
: o diretório temporário para o processo de carregamento do BigQuery
O que se segue?
- Saiba mais sobre os modelos do Dataflow.
- Consulte a lista de modelos fornecidos pela Google.