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 de origem do BigQuery precisa existir.
  • A tabela do Clickhouse precisa existir.

Parâmetros do modelo

Parâmetros obrigatórios

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

Parâmetros opcionais

  • inputTableSpec: a tabela do BigQuery a ser lida. 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. Exemplo: <BIGQUERY_PROJECT>:<DATASET_NAME>.<INPUT_TABLE>.
  • outputDeadletterTable: a tabela do BigQuery para mensagens que não alcançaram a 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 existente para criar a tabela temporária que vai 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 remoção de duplicação de blocos de inserção deve 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 the BigQuery to Clickhouse template.
  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 ID do projeto Google Cloud em que você quer executar o job do Dataflow
  • JOB_NAME: um nome de job de sua escolha
  • REGION_NAME: a região onde 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 do 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 ID do projeto Google Cloud em que você quer executar o job do Dataflow
  • JOB_NAME: um nome de job de sua escolha
  • LOCATION: a região onde 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 do JDBC.
  • CLICKHOUSE_USERNAME: seu nome de usuário do Clickhouse.
  • CLICKHOUSE_TABLE: sua tabela do Clickhouse.

A seguir