Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

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

Por padrão, o GCS ClickPipe pressupõe que os arquivos são adicionados a um bucket em ordem lexicográfica. É 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 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.

Como funciona

Nesse modo, o GCS ClickPipe 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.

Para ingerir apenas arquivos entregues pela assinatura, habilite Ignorar carga inicial. Quando habilitada, essa opção faz com que o ClickPipes ignore a varredura inicial dos arquivos existentes no caminho selecionado e processe apenas os arquivos entregues pela assinatura do Pub/Sub.

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.

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 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:

# 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 describe

Configure uma conta de serviço

1. Configure uma conta de serviço com as permissões necessárias 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:

# 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"

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. Para processar apenas arquivos da assinatura e ignorar a varredura inicial dos arquivos existentes no caminho selecionado, ative Skip initial load. A assinatura deve ser usada exclusivamente por este ClickPipe — veja Crie um tópico do Google Cloud Pub/Sub. O nome da assinatura deve seguir o formato abaixo:

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. A menos que Skip initial load esteja ativado, 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 eventos OBJECT_FINALIZE correspondentes forem entregues pela assinatura.

Navigation