Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Como configurar o modo não ordenado para ingestão contínua

Por padrão, o S3 ClickPipe pressupõe que os arquivos sejam adicionados a um bucket em ordem lexicográfica. É possível configurar um S3 ClickPipe para fazer a ingestão de arquivos que não tenham uma ordem implícita, configurando uma fila do Amazon SQS conectada ao bucket e, opcionalmente, usando o Amazon EventBridge como roteador de eventos. Isso permite que o ClickPipes escute eventos ObjectCreated:* e faça a ingestão de novos arquivos, independentemente da convenção de nomenclatura.

Como funciona

Nesse modo, o S3 ClickPipe faz uma carga inicial de todos os arquivos no caminho selecionado e, em seguida, passa a escutar eventos ObjectCreated:* na fila 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. A ingestão dos arquivos ocorre quando o limite configurado em max insert bytes ou max file count é atingido, ou após um intervalo configurável (por padrão, 30 segundos).

Para ingerir apenas arquivos entregues pela fila, 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 fila SQS.

Vários tipos de falha podem ocorrer durante a ingestão de dados, o que pode resultar em inserções parciais ou dados duplicados. Os ClickPipes de armazenamento de objetos são resilientes a falhas de inserção e fornecem semântica exactly-once usando tabelas temporárias de staging. Os dados são primeiro inseridos em uma tabela de staging; se algo der errado, a tabela de staging é truncada e a inserção é repetida a partir de um estado limpo. Somente depois que uma inserção é concluída com sucesso as partições são movidas para a tabela de destino.

Criar uma fila do Amazon SQS

1. No Console da AWS, navegue até Simple Queue Service > Create queue. Use as configurações padrão para criar uma nova fila padrão.

2. Conecte seu bucket S3 à fila SQS usando uma das duas opções abaixo. O EventBridge é recomendado na maioria dos casos de uso porque oferece suporte a fan-out, filtragem de eventos mais flexível e não está sujeito à restrição do S3 de uma regra de notificação por tipo de evento, por prefixo.

a. Nas propriedades do bucket do S3, navegue até Event notifications > Amazon EventBridge e habilite o envio de notificações para o EventBridge. Clique em Save changes.

Habilitando notificações do Amazon EventBridge nas propriedades do bucket do S3

b. No Console da AWS, navegue até Amazon EventBridge > Rules > Create rule. Dê um nome à regra (por exemplo, S3ObjectCreated), escolha o barramento de eventos default e clique em Next. Na etapa Build event pattern, selecione AWS events or EventBridge partner events como origem do evento e, em seguida, insira manualmente o seguinte padrão de evento, substituindo <bucket-name> pelo nome do seu bucket:

Definindo o nome da regra do EventBridge e o barramento de eventos
{
  "source": ["aws.s3"],
  "detail-type": ["Object Created"],
  "detail": {
    "bucket": {
      "name": ["<bucket-name>"]
    }
  }
}

Opcionalmente, adicione uma condição object.key ao padrão para filtrar por prefixo ou sufixo. Se fizer isso, verifique se ela corresponde ao caminho definido para o ClickPipe.

c. Na etapa Select target(s), escolha AWS service como tipo de destino e selecione SQS queue. Selecione a fila criada na etapa anterior. Deixe Use execution role (recommended) marcado para que o EventBridge crie automaticamente a IAM role necessária e, em seguida, clique em Next e conclua o assistente.

Definindo a fila do SQS como destino da regra do EventBridge
Regra do EventBridge criada com sucesso

d. Edite a política de acesso da fila do SQS para permitir que o EventBridge envie mensagens para ela. Substitua <sqs-queue-arn> e <eventbridge-rule-arn> pelos valores apropriados:

{
  "Version": "2012-10-17",
  "Id": "example-ID",
  "Statement": [
    {
      "Sid": "AllowEventBridgeToSendMessage",
      "Effect": "Allow",
      "Principal": {
        "Service": "events.amazonaws.com"
      },
      "Action": "SQS:SendMessage",
      "Resource": "<sqs-queue-arn>",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "<eventbridge-rule-arn>"
        }
      }
    }
  ]
}

Configure uma função do IAM

1. No console do ClickHouse Cloud, navegue até Settings > Network security information e copie o ARN da função do IAM do seu serviço.

2. No Console da AWS, navegue até IAM > Roles > Create role. Escolha Custom trust policy e cole o texto a seguir, substituindo <ch-cloud-arn> pelo ARN da função do IAM copiado na etapa anterior:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowAssumeRole",
      "Effect": "Allow",
      "Principal": {
        "AWS": "<ch-cloud-arn>"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

3. Crie uma política inline para a função do IAM com as permissões necessárias para ler objetos no S3 e gerenciar mensagens na fila do SQS. Substitua <bucket-arn> e <sqs-queue-arn> pelos valores apropriados:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "S3BucketMetadataAccess",
      "Effect": "Allow",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListBucket"
      ],
      "Resource": "<bucket-arn>"
    },
    {
      "Sid": "AllowGetListObjects",
      "Effect": "Allow",
      "Action": [
        "s3:Get*",
        "s3:List*"
      ],
      "Resource": "<bucket-arn>/*"
    },
    {
      "Sid": "SQSNotificationsAccess",
      "Effect": "Allow",
      "Action": [
        "sqs:DeleteMessage",
        "sqs:ListQueues",
        "sqs:ReceiveMessage",
        "sqs:GetQueueAttributes"
      ],
      "Resource": "<sqs-queue-arn>"
    }
  ]
}

Crie um ClickPipe com modo não ordenado

1. No console do ClickHouse Cloud, navegue até Fontes de dados > Criar ClickPipe e selecione Amazon S3. Insira os detalhes para se conectar ao seu bucket do S3. Em Método de autenticação, escolha IAM role e informe o ARN da role que você criou na etapa anterior.

2. Em Dados de entrada, ative Ingestão contínua. Selecione Qualquer ordem como modo de ingestão e informe a URL da fila do SQS da fila conectada ao seu bucket. Para processar apenas arquivos da fila e ignorar a varredura inicial dos arquivos existentes no caminho selecionado, habilite Ignorar carregamento inicial. A fila deve ser usada exclusivamente por este ClickPipe — consulte Criar uma fila do Amazon SQS.

3. Em Informações de parsing, defina uma Chave de ordenação para a tabela de destino. Faça os ajustes necessários no esquema mapeado e, em seguida, configure uma role para o usuário do banco de dados do ClickPipes.

4. Revise a configuração e clique em Criar ClickPipe. A menos que Ignorar carregamento inicial esteja habilitado, o ClickPipes fará uma varredura inicial no seu bucket para carregar todos os arquivos existentes que correspondam ao caminho especificado e, em seguida, começará a processar os arquivos à medida que eventos ObjectCreated:* correspondentes forem entregues pela fila.

Navigation