> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Configuración del modo no ordenado para la ingestión continua

> Guía paso a paso para configurar el modo no ordenado para la ingestión continua en GCS ClickPipes.

De forma predeterminada, ClickPipe de GCS asume que los archivos se agregan a un bucket en [orden lexicográfico](/es/integrations/clickpipes/object-storage/google-cloud-storage/overview#continuous-ingestion-lexicographical-order). 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](https://cloud.google.com/pubsub) 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.

<Note>
  El modo no ordenado **no** es compatible con buckets públicos. Requiere autenticación con **cuenta de servicio** y una suscripción de [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) conectada al bucket.
</Note>

<div id="how-it-works">
  ## Cómo funciona
</div>

En este modo, ClickPipe para 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á**. **No es posible** iniciar la ingestión desde un archivo concreto o desde un momento determinado: ClickPipes siempre cargará todos los archivos de la ruta seleccionada.

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.

<Steps>
  <Step>
    ## 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`](https://docs.cloud.google.com/storage/docs/pubsub-notifications) 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`:

    ```bash theme={null}
    # Crea una notificación de Pub/Sub para nuevos objetos en el 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"

    # Enumera las notificaciones de Pub/Sub en el bucket
    gcloud storage buckets notifications describe
    ```
  </Step>

  <Step>
    ## Configurar una cuenta de servicio

    **1.** Configura una [cuenta de servicio](http://docs.cloud.google.com/iam/docs/keys-create-delete) con los [permisos necesarios](/es/integrations/clickpipes/object-storage/google-cloud-storage/overview#permissions) 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`:

    ```bash theme={null}
    # 1. Concede acceso de lectura al bucket de GCS
    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. Concede acceso de lectura a la suscripción de Pub/Sub
    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. Concede permiso para obtener los metadatos de la suscripción de Pub/Sub
    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"
    ```
  </Step>

  <Step>
    ## 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. El nombre de la suscripción debe seguir el siguiente formato:

    ```text theme={null}
    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**. 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 lleguen nuevos eventos `OBJECT_FINALIZE` al tema.
  </Step>
</Steps>
