Modelo do Pub/Sub para Java Database Connectivity (JDBC)

O modelo Pub/Sub para Java Database Connectivity (JDBC) é um pipeline de streaming que carrega dados de uma subscrição do Pub/Sub pré-existente como strings JSON e escreve os registos resultantes no JDBC.

Requisitos do pipeline

  • A subscrição do Pub/Sub tem de existir antes de executar o pipeline.
  • A origem JDBC tem de existir antes de executar o pipeline.
  • O tópico de mensagens não entregues de saída do Pub/Sub tem de existir antes da execução do pipeline.

Parâmetros de modelos

Parâmetro Descrição
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.
driverJars Caminhos do Cloud Storage separados por vírgulas para controladores JDBC. Por exemplo, gs://your-bucket/driver_jar1.jar,gs://your-bucket/driver_jar2.jar.
username Opcional: o nome de utilizador a usar para a ligação JDBC. Pode transmitir este valor encriptado por uma chave do Cloud KMS como uma string codificada em Base64.
password Opcional: a palavra-passe a usar para a ligação JDBC. Pode transmitir este valor encriptado por uma chave do Cloud KMS como uma string codificada em Base64.
connectionProperties Opcional: string de propriedades a usar para a ligação JDBC. O formato da string tem de ser [propertyName=property;]*. Por exemplo, unicode=true;characterEncoding=UTF-8.
statement Declaração a executar na base de dados. A declaração tem de especificar os nomes das colunas da tabela por qualquer ordem. Apenas os valores dos nomes das colunas especificados são lidos a partir do JSON e adicionados à declaração. Por exemplo, INSERT INTO tableName (column1, column2) VALUES (?,?)
inputSubscription A subscrição de entrada do Pub/Sub a partir da qual ler, no formato projects/<project>/subscriptions/<subscription>.
outputDeadletterTopic O tópico Pub/Sub para encaminhar mensagens não entregues. Por exemplo, projects/<project-id>/topics/<topic-name>.
KMSEncryptionKey Opcional: chave de encriptação do Cloud KMS para desencriptar o nome de utilizador, a palavra-passe e a cadeia de caracteres da ligação. Se for transmitida uma chave do Cloud KMS, o nome de utilizador, a palavra-passe e a string de ligação têm de ser transmitidos encriptados.
extraFilesToStage Caminhos do Cloud Storage ou Secrets do Secret Manager separados por vírgulas para ficheiros a preparar no trabalhador. Estes ficheiros são guardados no diretório /extra_files em cada trabalhador. Por exemplo, gs://<my-bucket>/file.txt,projects/<project-id>/secrets/<secret-id>/versions/<version-id>.

Execute o modelo

Consola

  1. Aceda à página Dataflow 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 o artigo Localizações do Dataflow.

  5. No menu pendente Modelo do fluxo de dados, selecione the Pub/Sub to JDBC 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/Pubsub_to_Jdbc \
    --region REGION_NAME \
    --parameters \
driverClassName=DRIVER_CLASS_NAME,\
connectionUrl=JDBC_CONNECTION_URL,\
driverJars=DRIVER_PATHS,\
username=CONNECTION_USERNAME,\
password=CONNECTION_PASSWORD,\
connectionProperties=CONNECTION_PROPERTIES,\
statement=SQL_STATEMENT,\
inputSubscription=INPUT_SUBSCRIPTION,\
outputDeadletterTopic=OUTPUT_DEADLETTER_TOPIC,\
KMSEncryptionKey=KMS_ENCRYPTION_KEY

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_CLASS_NAME: o nome da classe do controlador
  • JDBC_CONNECTION_URL: o URL de ligação JDBC
  • DRIVER_PATHS: os caminhos do Cloud Storage separados por vírgulas dos controladores JDBC
  • CONNECTION_USERNAME: o nome de utilizador da ligação JDBC
  • CONNECTION_PASSWORD: a palavra-passe da ligação JDBC
  • CONNECTION_PROPERTIES: as propriedades da ligação JDBC, se necessário
  • SQL_STATEMENT: a declaração SQL a ser executada na base de dados
  • INPUT_SUBSCRIPTION: a subscrição de entrada do Pub/Sub a partir da qual ler
  • OUTPUT_DEADLETTER_TOPIC: o Pub/Sub para encaminhar mensagens não entregues
  • KMS_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": {
       "driverClassName": "DRIVER_CLASS_NAME",
       "connectionUrl": "JDBC_CONNECTION_URL",
       "driverJars": "DRIVER_PATHS",
       "username": "CONNECTION_USERNAME",
       "password": "CONNECTION_PASSWORD",
       "connectionProperties": "CONNECTION_PROPERTIES",
       "statement": "SQL_STATEMENT",
       "inputSubscription": "INPUT_SUBSCRIPTION",
       "outputDeadletterTopic": "OUTPUT_DEADLETTER_TOPIC",
       "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 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_CLASS_NAME: o nome da classe do controlador
  • JDBC_CONNECTION_URL: o URL de ligação JDBC
  • DRIVER_PATHS: os caminhos do Cloud Storage separados por vírgulas dos controladores JDBC
  • CONNECTION_USERNAME: o nome de utilizador da ligação JDBC
  • CONNECTION_PASSWORD: a palavra-passe da ligação JDBC
  • CONNECTION_PROPERTIES: as propriedades da ligação JDBC, se necessário
  • SQL_STATEMENT: a declaração SQL a ser executada na base de dados
  • INPUT_SUBSCRIPTION: a subscrição de entrada do Pub/Sub a partir da qual ler
  • OUTPUT_DEADLETTER_TOPIC: o Pub/Sub para encaminhar mensagens não entregues
  • KMS_ENCRYPTION_KEY: a chave de encriptação do Cloud KMS

O que se segue?