De forma predeterminada, ClickPipe de GCS asume que los archivos se agregan a un bucket en orden lexicográfico. Es posible configurar un ClickPipe de GCS para ingestar archivos que no tengan un orden implícito configurando una suscripción de Google Cloud Pub/Sub conectada al bucket. Esto permite a ClickPipes recibir notificaciones OBJECT_FINALIZE e ingestar cualquier archivo nuevo, independientemente de la convención de nombres de los archivos.
Cómo funciona
En este modo, ClickPipe de GCS realiza una carga inicial de todos los archivos de la ruta seleccionada y, a continuación, escucha las notificaciones de objetos a través de la suscripción de Pub/Sub que coincidan con la ruta especificada. Cualquier mensaje correspondiente a un archivo ya visto, a un archivo que no coincida con la ruta o a un evento de otro tipo se ignorará.
Para ingestar únicamente los archivos entregados a través de la suscripción, active Omitir carga inicial. Cuando está activada, ClickPipes omite el análisis inicial de los archivos existentes en la ruta seleccionada y procesa únicamente los archivos entregados a través de la suscripción de Pub/Sub.
Pueden producirse varios tipos de fallos al ingestar datos, lo que puede dar lugar a inserciones parciales o a datos duplicados. Object Storage ClickPipes es resistente a los fallos de inserción y proporciona semántica exactly-once mediante tablas de staging temporales. Los datos se insertan primero en una tabla de staging; si algo sale mal, la tabla de staging se trunca y la inserción se reintenta desde un estado limpio. Solo cuando una inserción se completa correctamente se mueven las particiones a la tabla de destino.
Crear un tema de Google Cloud Pub/Sub
1. En Google Cloud Console, ve a Pub/Sub > Topics > Create topic. Crea un tema nuevo con una suscripción predeterminada y anota el Topic Name.
2. Configura una notificación del bucket de GCS para que publique eventos OBJECT_FINALIZE en el tema de Pub/Sub creado anteriormente.
2.1. Este paso no puede realizarse en Google Cloud Console, por lo que debes usar el cliente gcloud o la interfaz programática de Google Cloud que prefieras. Por ejemplo, con gcloud:
# Create a Pub/Sub notification for new objects in the bucket
gcloud storage buckets notifications create "gs://${YOUR_BUCKET_NAME}" \
--topic="projects/${YOUR_PROJECT_ID}/topics/${YOUR_TOPIC_NAME}" \
--event-types="OBJECT_FINALIZE" \
--payload-format="json"
# List the Pub/Sub notifications in the bucket
gcloud storage buckets notifications describeConfigurar una cuenta de servicio
1. Configura una cuenta de servicio con los permisos necesarios para permitir que ClickPipes liste y recupere objetos del bucket especificado, así como consumir y supervisar las notificaciones de la suscripción de Pub/Sub.
1.1. Este paso puede realizarse en Google Cloud Console, con el cliente gcloud o con la interfaz programática de Google Cloud que prefieras. Por ejemplo, con gcloud:
# 1. Grant read access to the GCS bucket
gcloud storage buckets add-iam-policy-binding "gs://${YOUR_BUCKET_NAME}" \
--member="serviceAccount:${YOUR_SERVICE_ACCOUNT}@${YOUR_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/storage.objectViewer"
# 2. Grant read access to the Pub/Sub subscription
gcloud pubsub subscriptions add-iam-policy-binding "${YOUR_SUBSCRIPTION_NAME}" \
--member="serviceAccount:${YOUR_SERVICE_ACCOUNT}@${YOUR_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/pubsub.subscriber"
# 3. Grant permission to get the Pub/Sub subscription metadata
gcloud pubsub subscriptions add-iam-policy-binding "${YOUR_SUBSCRIPTION_NAME}" \
--member="serviceAccount:${YOUR_SERVICE_ACCOUNT}@${YOUR_PROJECT_ID}.iam.gserviceaccount.com" \
--role="roles/pubsub.viewer"Crear un ClickPipe con modo no ordenado
1. En la consola de ClickHouse Cloud, ve a Data Sources > Create ClickPipe y selecciona Google Cloud Storage. Introduce los datos necesarios para conectarte a tu bucket de GCS. En Authentication method, elige Service Account y proporciona la clave .json de la cuenta de servicio.
2. Activa Continuous ingestion, luego selecciona Any order como modo de ingestión e introduce el nombre de la Pub/Sub subscription correspondiente a la suscripción conectada a tu bucket. Para procesar solo archivos de la suscripción y omitir el análisis inicial de los archivos existentes en la ruta seleccionada, activa Skip initial load. La suscripción debe usarse exclusivamente para este ClickPipe; consulta Crear un tema de Google Cloud Pub/Sub. El nombre de la suscripción debe seguir el siguiente formato:
projects/${YOUR_PROJECT_ID}/subscriptions/${YOUR_SUBSCRIPTION_NAME}3. Haz clic en Incoming data. Define una Sorting key para la tabla de destino. Realiza los ajustes necesarios en el esquema asignado y, a continuación, configura un rol para el usuario de base de datos de ClickPipes.
4. Revisa la configuración y haz clic en Create ClickPipe. A menos que esté activada la opción Skip initial load, ClickPipes realizará un análisis inicial del bucket para cargar todos los archivos existentes que coincidan con la ruta especificada y, a continuación, empezará a procesar archivos a medida que se entreguen eventos OBJECT_FINALIZE coincidentes desde la suscripción.