O modelo do Oracle para o BigQuery é um pipeline em lote que copia dados de uma tabela do Oracle para uma tabela do BigQuery existente. Este pipeline usa o JDBC para estabelecer ligação ao Oracle. Para uma camada adicional de proteção, também pode transmitir uma chave do Cloud KMS juntamente com os parâmetros de nome de utilizador, palavra-passe e string de ligação codificados em Base64 encriptados com a chave do Cloud KMS. Para mais informações sobre a encriptação do nome de utilizador, da palavra-passe e dos parâmetros da string de ligação, consulte o ponto final da API Cloud KMS Encryption.
Requisitos do pipeline
- 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 Oracle to BigQuery template.
- Nos campos de parâmetros fornecidos, introduza os valores dos parâmetros.
- Clique em Executar tarefa.
CLI gcloud
Na shell ou no terminal, execute o modelo:
gcloud dataflow flex-template run JOB_NAME \ --project=PROJECT_ID \ --region=REGION_NAME \ --template-file-gcs-location=gs://dataflow-templates-REGION_NAME/VERSION/flex/Oracle_to_BigQuery \ --parameters \ connectionURL=JDBC_CONNECTION_URL,\ query=SOURCE_SQL_QUERY,\ outputTable=PROJECT_ID:DATASET.TABLE_NAME, bigQueryLoadingTemporaryDirectory=PATH_TO_TEMP_DIR_ON_GCS,\ connectionProperties=CONNECTION_PROPERTIES,\ username=CONNECTION_USERNAME,\ password=CONNECTION_PASSWORD,\ KMSEncryptionKey=KMS_ENCRYPTION_KEY
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
JDBC_CONNECTION_URL
: o URL de ligação JDBCSOURCE_SQL_QUERY
: a consulta SQL a executar na base de dados de origemDATASET
: o seu conjunto de dados do BigQueryTABLE_NAME
: o nome da tabela do BigQueryPATH_TO_TEMP_DIR_ON_GCS
: o caminho do Cloud Storage para o diretório temporárioCONNECTION_PROPERTIES
: as propriedades da ligação JDBC, se necessárioCONNECTION_USERNAME
: o nome de utilizador da ligação JDBCCONNECTION_PASSWORD
: a palavra-passe da ligação JDBCKMS_ENCRYPTION_KEY
: a chave de encriptação do Cloud KMS
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 { "jobName": "JOB_NAME", "parameters": { "connectionURL": "JDBC_CONNECTION_URL", "query": "SOURCE_SQL_QUERY", "outputTable": "PROJECT_ID:DATASET.TABLE_NAME", "bigQueryLoadingTemporaryDirectory": "PATH_TO_TEMP_DIR_ON_GCS", "connectionProperties": "CONNECTION_PROPERTIES", "username": "CONNECTION_USERNAME", "password": "CONNECTION_PASSWORD", "KMSEncryptionKey":"KMS_ENCRYPTION_KEY" }, "environment": { "zone": "us-central1-f" } }
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
JDBC_CONNECTION_URL
: o URL de ligação JDBCSOURCE_SQL_QUERY
: a consulta SQL a executar na base de dados de origemDATASET
: o seu conjunto de dados do BigQueryTABLE_NAME
: o nome da tabela do BigQueryPATH_TO_TEMP_DIR_ON_GCS
: o caminho do Cloud Storage para o diretório temporárioCONNECTION_PROPERTIES
: as propriedades da ligação JDBC, se necessárioCONNECTION_USERNAME
: o nome de utilizador da ligação JDBCCONNECTION_PASSWORD
: a palavra-passe da ligação JDBCKMS_ENCRYPTION_KEY
: a chave de encriptação do Cloud KMS