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

# Configurando o modo não ordenado para ingestão contínua

> Guia passo a passo para configurar o modo não ordenado para ingestão contínua no ClickPipes do GCS.

Por padrão, o GCS ClickPipe pressupõe que os arquivos são adicionados a um bucket em [ordem lexicográfica](/pt-BR/integrations/clickpipes/object-storage/google-cloud-storage/overview#continuous-ingestion-lexicographical-order). É possível configurar um GCS ClickPipe para fazer a ingestão de arquivos que não seguem uma ordem implícita, configurando uma assinatura do [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) conectada ao bucket. Isso permite que o ClickPipes receba notificações `OBJECT_FINALIZE` e faça a ingestão de novos arquivos independentemente da convenção de nomenclatura.

<Note>
  O modo não ordenado **não** é compatível com buckets públicos. Ele exige autenticação por **Service Account** e uma assinatura do [Google Cloud Pub/Sub](https://cloud.google.com/pubsub) conectada ao bucket.
</Note>

<div id="how-it-works">
  ## Como funciona
</div>

Nesse modo, o ClickPipe do GCS faz uma carga inicial de **todos os arquivos** no caminho selecionado e, em seguida, passa a escutar notificações de objetos pela assinatura do Pub/Sub que correspondam ao caminho especificado. Qualquer mensagem referente a um arquivo já visto, a um arquivo que não corresponda ao caminho ou a um evento de outro tipo será **ignorada**. **Não é possível** iniciar a ingestão a partir de um arquivo específico ou de um momento específico — o ClickPipes sempre carregará todos os arquivos no caminho selecionado.

Vários tipos de falha podem ocorrer durante a ingestão de dados, o que pode resultar em inserts parciais ou dados duplicados. Os Object Storage ClickPipes são resilientes a falhas de insert e fornecem semântica de exatamente uma vez usando staging tables temporárias. Primeiro, os dados são inseridos em uma staging table; se algo der errado, a staging table é truncada e o insert é repetido a partir de um estado limpo. Somente depois que um insert é concluído com sucesso as partições são movidas para a tabela de destino.

<Steps>
  <Step>
    ## Crie um tópico do Google Cloud Pub/Sub

    **1.** No Google Cloud Console, navegue até **Pub/Sub > Topics > Create topic**. Crie um novo tópico com uma assinatura padrão e anote o **Nome do tópico**.

    **2.** Configure uma notificação de bucket do GCS que publique eventos [`OBJECT_FINALIZE`](https://docs.cloud.google.com/storage/docs/pubsub-notifications) no tópico do Pub/Sub criado acima.

    **2.1.** Esta etapa não pode ser executada no Google Cloud Console, portanto você deve usar o cliente `gcloud` ou a interface programática de sua preferência para o Google Cloud. Por exemplo, usando `gcloud`:

    ```bash theme={null}
    # Crie uma notificação do Pub/Sub para novos objetos no 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"

    # Liste as notificações do Pub/Sub no bucket
    gcloud storage buckets notifications describe
    ```
  </Step>

  <Step>
    ## Configure uma conta de serviço

    **1.** Configure uma [conta de serviço](http://docs.cloud.google.com/iam/docs/keys-create-delete) com as [permissões necessárias](/pt-BR/integrations/clickpipes/object-storage/google-cloud-storage/overview#permissions) para permitir que o ClickPipes liste e busque objetos no bucket especificado, bem como consuma e monitore notificações da assinatura do Pub/Sub.

    **1.1.** Esta etapa pode ser executada no Google Cloud Console, usando o cliente `gcloud` ou a interface programática de sua preferência para o Google Cloud. Por exemplo, usando `gcloud`:

    ```bash theme={null}
    # 1. Conceda acesso de leitura ao bucket do 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. Conceda acesso de leitura à assinatura do 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. Conceda permissão para obter os metadados da assinatura do 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>
    ## Crie um ClickPipe com modo não ordenado

    **1.** No console do ClickHouse Cloud, navegue até **Data Sources > Create ClickPipe** e selecione **Google Cloud Storage**. Insira os detalhes para se conectar ao seu bucket do GCS. Em **Authentication method**, escolha **Service Account** e forneça a chave `.json` da conta de serviço.

    **2.** Ative **Continuous ingestion**, depois selecione **Any order** como modo de ingestão e informe o nome da **assinatura do Pub/Sub** conectada ao seu bucket. O nome da assinatura deve seguir o formato abaixo:

    ```text theme={null}
    projects/${YOUR_PROJECT_ID}/subscriptions/${YOUR_SUBSCRIPTION_NAME}
    ```

    **3.** Clique em **Incoming data**. Defina uma **Sorting key** para a tabela de destino. Faça os ajustes necessários no schema mapeado e, em seguida, configure uma role para o usuário de banco de dados do ClickPipes.

    **4.** Revise a configuração e clique em **Create ClickPipe**. O ClickPipes fará uma varredura inicial no bucket para carregar todos os arquivos existentes que correspondam ao caminho especificado e, em seguida, começará a processar os arquivos à medida que novos eventos `OBJECT_FINALIZE` chegarem ao tópico.
  </Step>
</Steps>
