Plantilla de BigQuery a Clickhouse

La plantilla de BigQuery a Clickhouse es un flujo de procesamiento por lotes que copia datos de una tabla de BigQuery en una tabla de Clickhouse. La plantilla puede leer toda la tabla o registros específicos mediante una consulta proporcionada.

Requisitos del flujo de procesamiento

  • La tabla de BigQuery de origen debe existir.
  • La tabla de Clickhouse debe existir.

Parámetros de plantilla

Parámetros obligatorios

  • jdbcUrl la URL de JDBC de ClickHouse de destino con el formato jdbc:clickhouse://host:port/schema. Se puede añadir cualquier opción de JDBC al final de la URL de JDBC. Por ejemplo, jdbc:clickhouse://localhost:8123/default.
  • clickHouseUsername nombre de usuario de ClickHouse para autenticarte.
  • clickHouseTable nombre de la tabla de ClickHouse de destino en la que se insertarán los datos.

Parámetros opcionales

  • inputTableSpec la tabla de BigQuery de la que se van a leer los datos. Si especificas inputTableSpec, la plantilla lee los datos directamente del almacenamiento de BigQuery mediante la API Storage Read de BigQuery (https://cloud.google.com/bigquery/docs/reference/storage). Para obtener información sobre las limitaciones de la API Storage Read, consulta https://cloud.google.com/bigquery/docs/reference/storage#limitations. Debes especificar inputTableSpec o query. Si defines ambos parámetros, la plantilla usará el parámetro query. Por ejemplo, <BIGQUERY_PROJECT>:<DATASET_NAME>.<INPUT_TABLE>.
  • outputDeadletterTable la tabla de BigQuery de los mensajes que no se han podido enviar a la tabla de salida. Si una tabla no existe, se crea durante la ejecución de la canalización. Si no se especifica, se usa <outputTableSpec>_error_records. Por ejemplo, <PROJECT_ID>:<DATASET_NAME>.<DEADLETTER_TABLE>.
  • query: la consulta de SQL que se usará para leer datos de BigQuery. Si el conjunto de datos de BigQuery está en un proyecto diferente al del trabajo de Dataflow, especifica el nombre completo del conjunto de datos en la consulta SQL. Por ejemplo: <PROJECT_ID>.<DATASET_NAME>.<TABLE_NAME>. De forma predeterminada, el parámetro query usa GoogleSQL (https://cloud.google.com/bigquery/docs/introduction-sql), a menos que useLegacySql sea true. Debes especificar inputTableSpec o query. Si defines ambos parámetros, la plantilla usará el parámetro query. Por ejemplo, select * from sampledb.sample_table.
  • useLegacySql asigna el valor true para usar SQL antiguo. Este parámetro solo se aplica cuando se usa el parámetro query. El valor predeterminado es false.
  • queryLocation se necesita al leer datos de una vista autorizada sin el permiso de la tabla subyacente. Por ejemplo, US.
  • queryTempDataset con esta opción, puedes definir un conjunto de datos para crear la tabla temporal en la que se almacenarán los resultados de la consulta. Por ejemplo, temp_dataset.
  • KMSEncryptionKey si lees datos de BigQuery mediante una fuente de consulta, usa esta clave de Cloud KMS para cifrar las tablas temporales que se creen. Por ejemplo, projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key.
  • clickHousePassword la contraseña de ClickHouse para autenticarte.
  • maxInsertBlockSize tamaño máximo del bloque de inserción, si controlamos la creación de bloques de inserción (opción ClickHouseIO).
  • insertDistributedSync si el ajuste está habilitado, la consulta de inserción en la espera distribuida hasta que los datos se envíen a todos los nodos del clúster. (opción ClickHouseIO).
  • insertQuorum en las consultas INSERT de la tabla replicada, espera a que se escriban el número de réplicas especificado y linealiza la adición de los datos. 0: inhabilitado. Este ajuste está inhabilitado en la configuración predeterminada del servidor (opción ClickHouseIO).
  • insertDeduplicate en las consultas INSERT de la tabla replicada, especifica que se debe realizar la deduplicación de los bloques de inserción.
  • maxRetries número máximo de reintentos por inserción.

Ejecutar la plantilla

Consola

  1. Ve a la página Crear tarea a partir de plantilla de Dataflow.
  2. Ir a Crear tarea a partir de plantilla
  3. En el campo Nombre de la tarea, introduce un nombre único.
  4. Opcional: En Endpoint regional, seleccione un valor en el menú desplegable. La región predeterminada es us-central1.

    Para ver una lista de las regiones en las que puedes ejecutar una tarea de Dataflow, consulta Ubicaciones de Dataflow.

  5. En el menú desplegable Plantilla de flujo de datos, seleccione the BigQuery to Clickhouse template.
  6. En los campos de parámetros proporcionados, introduzca los valores de los parámetros.
  7. Haz clic en Ejecutar trabajo.

gcloud

En tu shell o terminal, ejecuta la plantilla:

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

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto Google Cloud en el que quieres ejecutar la tarea de Dataflow
  • JOB_NAME: un nombre de trabajo único que elijas
  • REGION_NAME: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo, us-central1
  • VERSION: la versión de la plantilla que quieres usar

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: gs://dataflow-templates-REGION_NAME/latest/
    • el nombre de la versión, como 2023-09-12-00_RC00, para usar una versión específica de la plantilla, que se encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
  • JDBC_URL: tu URL de JDBC.
  • CLICKHOUSE_USERNAME: tu nombre de usuario de Clickhouse.
  • CLICKHOUSE_TABLE: tu tabla de Clickhouse.

API

Para ejecutar la plantilla mediante la API REST, envía una solicitud HTTP POST. Para obtener más información sobre la API y sus ámbitos de autorización, consulta 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",
   }
}

Haz los cambios siguientes:

  • PROJECT_ID: el ID del proyecto Google Cloud en el que quieres ejecutar la tarea de Dataflow
  • JOB_NAME: un nombre de trabajo único que elijas
  • LOCATION: la región en la que quieras desplegar tu trabajo de Dataflow. Por ejemplo, us-central1
  • VERSION: la versión de la plantilla que quieres usar

    Puedes usar los siguientes valores:

    • latest para usar la última versión de la plantilla, que está disponible en la carpeta principal sin fecha del contenedor: gs://dataflow-templates-REGION_NAME/latest/
    • el nombre de la versión, como 2023-09-12-00_RC00, para usar una versión específica de la plantilla, que se encuentra anidada en la carpeta principal correspondiente con la fecha en el bucket: gs://dataflow-templates-REGION_NAME/
  • JDBC_URL: tu URL de JDBC.
  • CLICKHOUSE_USERNAME: tu nombre de usuario de Clickhouse.
  • CLICKHOUSE_TABLE: tu tabla de Clickhouse.

Siguientes pasos