> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Como configurar 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 para S3.

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

Por padrão, o S3 ClickPipe pressupõe que os arquivos sejam adicionados a um bucket em [ordem lexicográfica](/docs/pt-BR/integrations/clickpipes/object-storage/amazon-s3/overview#continuous-ingestion-lexicographical-order). É 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](https://aws.amazon.com/sqs/) conectada ao bucket e, opcionalmente, usando o [Amazon EventBridge](https://aws.amazon.com/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.

<Note>
  O modo não ordenado é compatível **somente** com o Amazon S3 e **não** é compatível com buckets públicos nem com serviços compatíveis com S3. Ele exige a configuração de uma fila do [Amazon SQS](https://aws.amazon.com/sqs/) conectada ao bucket e, opcionalmente, o uso do [Amazon EventBridge](https://aws.amazon.com/eventbridge/) como roteador de eventos.
</Note>

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

Nesse modo, o ClickPipe do S3 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). **Não é possível** iniciar a ingestão a partir de um arquivo específico ou de um ponto no tempo — 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 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.

<Steps>
  <Step title="Criar uma fila do Amazon SQS" id="create-sqs-queue">
    **1.** No AWS Console, navegue até **Simple Queue Service > Create queue**. Use as configurações padrão para criar uma nova fila padrão.

    <Warning>
      **Uma fila por ClickPipe**

      Cada ClickPipe precisa da sua própria fila dedicada no SQS. O SQS entrega cada mensagem a apenas um consumidor: se dois ou mais ClickPipes (ou qualquer outro aplicativo) consumirem a mesma fila, cada evento será recebido por apenas um deles, e os arquivos serão ignorados silenciosamente pelos pipes que nunca receberem o evento. Isso se aplica mesmo que os ClickPipes usem diferentes padrões de caminho — um pipe que recebe um evento para um arquivo que não corresponde ao padrão o descarta, e nenhum outro pipe jamais verá esse evento. Para fazer a ingestão a partir do mesmo bucket com vários ClickPipes, crie uma fila por ClickPipe e use regras do EventBridge para rotear os eventos para cada fila.
    </Warning>

    <Tip>
      Recomendamos fortemente configurar uma **fila de mensagens mortas (DLQ)** para a fila do SQS, para facilitar a depuração e a nova tentativa de processamento de mensagens com falha. Se uma DLQ estiver configurada, as mensagens com falha serão reenfileiradas e reprocessadas até atingir o número de tentativas definido no parâmetro `maxReceiveCount` da DLQ.
    </Tip>

    **2.** Conecte seu bucket do S3 à fila SQS usando uma das duas opções abaixo. O EventBridge é recomendado para a 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.

    <Tabs>
      <Tab title="via EventBridge">
        **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**.

        <Image img="https://mintcdn.com/private-7c7dfe99/Rm4A9_kDxZf0ApeE/images/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/cp_eb_s3_enable.webp?fit=max&auto=format&n=Rm4A9_kDxZf0ApeE&q=85&s=3fe4e9b561befacda31c27dde551922b" alt="Habilitando notificações do Amazon EventBridge nas propriedades do bucket do S3" size="lg" border width="2682" height="716" data-path="images/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/cp_eb_s3_enable.webp" />

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

        <Image img="https://mintcdn.com/private-7c7dfe99/Rm4A9_kDxZf0ApeE/images/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/cp_eb_rule_define.webp?fit=max&auto=format&n=Rm4A9_kDxZf0ApeE&q=85&s=d977ab92e5b203ac254126ee1ae2352f" alt="Definindo o nome da regra do EventBridge e o barramento de eventos" size="lg" border width="2680" height="1118" data-path="images/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/cp_eb_rule_define.webp" />

        ```json theme={null}
        {
          "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.

        <Image img="https://mintcdn.com/private-7c7dfe99/Rm4A9_kDxZf0ApeE/images/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/cp_eb_rule_target.webp?fit=max&auto=format&n=Rm4A9_kDxZf0ApeE&q=85&s=22491d9288ba03e8261d21a359744ff4" alt="Definindo a fila do SQS como destino da regra do EventBridge" size="lg" border width="2682" height="1348" data-path="images/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/cp_eb_rule_target.webp" />

        <Image img="https://mintcdn.com/private-7c7dfe99/Rm4A9_kDxZf0ApeE/images/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/cp_eb_rule_created.webp?fit=max&auto=format&n=Rm4A9_kDxZf0ApeE&q=85&s=54a37b27ed02f4be0ebad2a595ada080" alt="Regra do EventBridge criada com sucesso" size="lg" border width="2682" height="1348" data-path="images/integrations/data-ingestion/clickpipes/object-storage/amazon-s3/cp_eb_rule_created.webp" />

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

        ```json theme={null}
        {
          "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>"
                }
              }
            }
          ]
        }
        ```
      </Tab>

      <Tab title="Direct S3 → SQS">
        **a.** Edite a política de acesso da fila do SQS para permitir que seu bucket do S3 envie mensagens para ela. Substitua `<sqs-queue-arn>`, `<bucket-arn>` e `<aws-account-id>` pelos valores apropriados:

        ```json theme={null}
        {
          "Version": "2012-10-17",
          "Id": "example-ID",
          "Statement": [
            {
              "Sid": "AllowS3ToSendMessage",
              "Effect": "Allow",
              "Principal": {
                "Service": "s3.amazonaws.com"
              },
              "Action": "SQS:SendMessage",
              "Resource": "<sqs-queue-arn>",
              "Condition": {
                "ArnLike": {
                  "aws:SourceArn": "<bucket-arn>"
                },
                "StringEquals": {
                  "aws:SourceAccount": "<aws-account-id>"
                }
              }
            }
          ]
        }
        ```

        **b.** Nas propriedades do bucket do S3, habilite **Event notifications**, selecione **All object create events** (`s3:ObjectCreated:*`) como tipo de evento e defina a fila do SQS como destino. Não selecione tipos de evento individuais: uploads podem emitir diferentes eventos `ObjectCreated` dependendo de como são realizados (por exemplo, uploads multipart emitem `CompleteMultipartUpload` em vez de `Put`), e arquivos cujo tipo de evento não for selecionado nunca serão entregues à fila. Opcionalmente, especifique um prefixo ou sufixo para filtrar quais objetos acionam notificações — se fizer isso, verifique se ele corresponde ao caminho definido para o ClickPipe.

        <Note>
          O S3 não permite várias regras de notificação sobrepostas para os mesmos tipos de evento em um mesmo bucket. Se você já tiver uma regra de notificação para eventos `ObjectCreated` nesse bucket, use a abordagem com EventBridge.
        </Note>
      </Tab>
    </Tabs>
  </Step>

  <Step title="Configure uma função do IAM" id="configure-iam-role">
    **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:

    ```json theme={null}
    {
      "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](/docs/pt-BR/integrations/clickpipes/object-storage/amazon-s3/overview#permissions) para ler objetos no S3 e gerenciar mensagens na fila do SQS. Substitua `<bucket-arn>` e `<sqs-queue-arn>` pelos valores apropriados:

    ```json theme={null}
    {
      "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>"
        }
      ]
    }
    ```
  </Step>

  <Step title="Crie um ClickPipe com modo não ordenado" id="create-clickpipe">
    **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. A fila deve ser usada exclusivamente por este ClickPipe — consulte [Criar uma fila do Amazon SQS](#create-sqs-queue).

    **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**. 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 novos eventos `ObjectCreated:*` chegarem à fila.
  </Step>
</Steps>
