Modelo do BigQuery para o Clickhouse

O modelo do BigQuery para o Clickhouse é um pipeline em lote que copia dados de uma tabela do BigQuery para uma tabela do Clickhouse. O modelo pode ler toda a tabela ou ler registros específicos usando uma consulta fornecida.

Requisitos de pipeline

  • A tabela do BigQuery de origem precisa existir.
  • A tabela do Clickhouse precisa existir.

Parâmetros do modelo

Parâmetros obrigatórios

  • jdbcUrl: o URL JDBC do ClickHouse de destino no formato jdbc:clickhouse://host:port/schema. Qualquer opção JDBC pode ser adicionada ao final do URL JDBC. Por exemplo, jdbc:clickhouse://localhost:8123/default.
  • clickHouseUsername: o nome de usuário do ClickHouse para autenticação.
  • clickHouseTable: o nome da tabela do ClickHouse de destino para inserir os dados.

Parâmetros opcionais

  • inputTableSpec: a tabela do BigQuery para leitura. Se você especificar inputTableSpec, o modelo vai ler os dados diretamente do armazenamento do BigQuery usando a API BigQuery Storage Read (https://cloud.google.com/bigquery/docs/reference/storage). Para informações sobre limitações na API Storage Read, consulte https://cloud.google.com/bigquery/docs/reference/storage#limitations. É preciso especificar inputTableSpec ou query. Se você definir os dois parâmetros, o modelo vai usar o query. Por exemplo, <BIGQUERY_PROJECT>:<DATASET_NAME>.<INPUT_TABLE>.
  • outputDeadletterTable: a tabela do BigQuery para mensagens que não chegaram à tabela de saída. Se uma tabela não existir, ela será criada durante a execução do pipeline. Se não for especificado, <outputTableSpec>_error_records será usado. Por exemplo, <PROJECT_ID>:<DATASET_NAME>.<DEADLETTER_TABLE>.
  • query: a consulta SQL a ser usada para ler dados do BigQuery. Se o conjunto de dados do BigQuery estiver em um projeto diferente do job do Dataflow, especifique o nome completo do conjunto de dados na consulta SQL. Por exemplo: <PROJECT_ID>.<DATASET_NAME>.<TABLE_NAME>. Por padrão, o parâmetro query usa o GoogleSQL (https://cloud.google.com/bigquery/docs/introduction-sql), a menos que useLegacySql seja true. É preciso especificar inputTableSpec ou query. Se você definir os dois parâmetros, o modelo vai usar o query. Por exemplo, select * from sampledb.sample_table.
  • useLegacySql: defina como true para usar o SQL legado. Esse parâmetro só se aplica ao usar o parâmetro query. O padrão é false.
  • queryLocation: necessário ao ler uma visualização autorizada sem a permissão da tabela subjacente. Por exemplo, US.
  • queryTempDataset: com essa opção, é possível definir um conjunto de dados atual para criar a tabela temporária para armazenar os resultados da consulta. Por exemplo, temp_dataset.
  • KMSEncryptionKey: se você estiver lendo do BigQuery usando a origem da consulta, use essa chave do Cloud KMS para criptografar todas as tabelas temporárias criadas. Por exemplo, projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key.
  • clickHousePassword: a senha do ClickHouse para autenticação.
  • maxInsertBlockSize: o tamanho máximo do bloco para inserção, se controlarmos a criação de blocos para inserção (opção ClickHouseIO).
  • insertDistributedSync: se a configuração estiver ativada, insira a consulta em espera distribuída até que os dados sejam enviados para todos os nós no cluster. (opção ClickHouseIO).
  • insertQuorum: para consultas INSERT na tabela replicada, aguarde a gravação do número especificado de réplicas e linearize a adição dos dados. 0: desativado. Essa configuração está desativada nas configurações padrão do servidor (opção ClickHouseIO).
  • insertDeduplicate: para consultas INSERT na tabela replicada, especifica que a desduplicação de blocos de inserção precisa ser realizada.
  • maxRetries: número máximo de novas tentativas por inserção.

Executar o modelo

Console

  1. Acesse a página Criar job usando um modelo do Dataflow.
  2. Acesse Criar job usando um modelo
  3. No campo Nome do job, insira um nome exclusivo.
  4. Opcional: em Endpoint regional, selecione um valor no menu suspenso. A região padrão é us-central1.

    Para ver uma lista de regiões em que é possível executar um job do Dataflow, consulte Locais do Dataflow.

  5. No menu suspenso Modelo do Dataflow, selecione o modelo BigQuery para Clickhouse.
  6. Nos campos de parâmetro fornecidos, insira os valores de parâmetro.
  7. Cliquem em Executar job.

gcloud

No 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/BigQuery_to_Clickhouse \
    --parameters \
jdbcUrl=JDBC_URL,\
clickHouseUsername=CLICKHOUSE_USERNAME,\
clickHouseTable=CLICKHOUSE_TABLE

Substitua:

  • PROJECT_ID: o Google Cloud ID do projeto em que você quer executar o job do Dataflow
  • JOB_NAME: um nome de job exclusivo de sua escolha
  • REGION_NAME: a região em que você quer implantar o job do Dataflow, por exemplo, us-central1
  • VERSION: a versão do modelo que você quer usar

    Use estes valores:

  • JDBC_URL: seu URL JDBC.
  • CLICKHOUSE_USERNAME: seu nome de usuário do Clickhouse.
  • CLICKHOUSE_TABLE: sua tabela do Clickhouse.

API

Para executar o modelo usando a API REST, envie uma solicitação HTTP POST. Para mais informações sobre a API e os respectivos escopos de autorização, consulte projects.templates.launch.

POST https://dataflow.googleapis.com/v1b3/projects/PROJECT_ID/locations/LOCATION/flexTemplates:launch
{
   "launch_parameter": {
      "jobName": "JOB_NAME",
      "parameters": {
          "jdbcUrl": "JDBC_URL",
          "clickHouseUsername": "CLICKHOUSE_USERNAME",
          "clickHouseTable": "CLICKHOUSE_TABLE"
      },
      "containerSpecGcsPath": "gs://dataflow-templates-LOCATION/VERSION/flex/BigQuery_to_Clickhouse",
   }
}

Substitua:

  • PROJECT_ID: o Google Cloud ID do projeto em que você quer executar o job do Dataflow
  • JOB_NAME: um nome de job exclusivo de sua escolha
  • LOCATION: a região em que você quer implantar o job do Dataflow, por exemplo, us-central1
  • VERSION: a versão do modelo que você quer usar

    Use estes valores:

  • JDBC_URL: seu URL JDBC.
  • CLICKHOUSE_USERNAME: seu nome de usuário do Clickhouse.
  • CLICKHOUSE_TABLE: sua tabela do Clickhouse.

A seguir