De forma predeterminada, el ClickPipe de S3 asume que los archivos se agregan a un bucket en orden lexicográfico. Es posible configurar un ClickPipe de S3 para ingestar archivos que no tengan un orden implícito mediante la configuración de una cola de Amazon SQS conectada al bucket y, opcionalmente, usando Amazon EventBridge como enrutador de eventos. Esto permite a ClickPipes escuchar eventos ObjectCreated:* e ingestar cualquier archivo nuevo, independientemente de la convención de nomenclatura de los archivos.
Cómo funciona
En este modo, el ClickPipe de S3 realiza una carga inicial de todos los archivos de la ruta seleccionada y luego escucha eventos ObjectCreated:* en la cola 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á. Los archivos se ingestan cuando se alcanza el umbral configurado en max insert bytes o max file count, o después de un intervalo configurable (30 segundos de forma predeterminada).
Para ingestar únicamente los archivos entregados a través de la cola, active Omitir carga inicial. Cuando está activada, ClickPipes omite la exploración inicial de los archivos existentes en la ruta seleccionada y procesa únicamente los archivos entregados a través de la cola SQS.
Pueden producirse varios tipos de fallos al ingestar datos, lo que puede dar lugar a inserciones parciales o a datos duplicados. Object Storage ClickPipes tolera los fallos de inserción y proporciona semántica exactly-once mediante tablas temporales de staging. 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. Las particiones solo se mueven a la tabla de destino una vez que la inserción se ha completado correctamente.
Crear una cola de Amazon SQS
1. En la AWS Console, navegue a Simple Queue Service > Create queue. Utilice los valores predeterminados para crear una nueva cola estándar.
2. Conecte su bucket de S3 a la cola SQS mediante una de las dos opciones que se describen a continuación. EventBridge es la opción recomendada para la mayoría de los casos de uso, ya que admite fan-out, un filtrado de eventos más flexible y no está sujeto a la restricción de S3 de una regla de notificación por tipo de evento y por prefijo.
a. En las propiedades del bucket de S3, ve a Event notifications > Amazon EventBridge y habilita el envío de notificaciones a EventBridge. Haz clic en Save changes.

b. En la Console de AWS, ve a Amazon EventBridge > Rules > Create rule. Asigna un nombre a la regla (por ejemplo, S3ObjectCreated), elige el bus de eventos default y haz clic en Next. En el paso Build event pattern, selecciona AWS events or EventBridge partner events como origen del evento y luego introduce manualmente el siguiente patrón de evento, sustituyendo <bucket-name> por el nombre de tu bucket:

{
"source": ["aws.s3"],
"detail-type": ["Object Created"],
"detail": {
"bucket": {
"name": ["<bucket-name>"]
}
}
}Opcionalmente, añade una condición object.key al patrón para filtrar por prefijo o sufijo. Si lo haces, asegúrate de que coincida con la ruta configurada para el ClickPipe.
c. En el paso Select target(s), elige AWS service como tipo de destino y selecciona SQS queue. Elige la cola creada en el paso anterior. Deja marcada la opción Use execution role (recommended) para que EventBridge cree automáticamente el IAM role necesario y, a continuación, haz clic en Next y completa el asistente.


d. Edita la política de acceso de la cola de SQS para permitir que EventBridge le envíe mensajes. Sustituye <sqs-queue-arn> y <eventbridge-rule-arn> por los valores correspondientes:
{
"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>"
}
}
}
]
}a. Edita la política de acceso de la cola de SQS para permitir que tu bucket de S3 le envíe mensajes. Sustituye <sqs-queue-arn>, <bucket-arn> y <aws-account-id> por los valores correspondientes:
{
"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. En las propiedades del bucket de S3, habilita Event notifications, selecciona All object create events (s3:ObjectCreated:*) como tipo de evento y configura la cola de SQS como destino. No selecciones tipos de evento individuales: las cargas pueden emitir distintos eventos ObjectCreated según cómo se realicen (por ejemplo, las cargas multiparte emiten CompleteMultipartUpload en lugar de Put), y los archivos cuyo tipo de evento no esté seleccionado nunca se entregarán a la cola. Opcionalmente, especifica un prefijo o sufijo para filtrar qué objetos activan las notificaciones; si lo haces, asegúrate de que coincida con la ruta configurada para el ClickPipe.
Configurar un rol de IAM
1. En la consola de ClickHouse Cloud, ve a Settings > Network security information y copia el ARN del rol de IAM de tu servicio.
2. En la consola de AWS, ve a IAM > Roles > Create role. Elige Custom trust policy y pega lo siguiente, sustituyendo <ch-cloud-arn> por el ARN del rol de IAM que copiaste en el paso anterior:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAssumeRole",
"Effect": "Allow",
"Principal": {
"AWS": "<ch-cloud-arn>"
},
"Action": "sts:AssumeRole"
}
]
}3. Cree una política en línea para el rol de IAM con los permisos requeridos para leer objetos de S3 y administrar mensajes en la cola de SQS. Sustituya <bucket-arn> y <sqs-queue-arn> por los valores correspondientes:
{
"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>"
}
]
}Crear un ClickPipe con modo no ordenado
1. En la consola de ClickHouse Cloud, vaya a Data Sources > Create ClickPipe y seleccione Amazon S3. Introduzca la información necesaria para conectarse a su bucket de S3. En Authentication method, elija IAM role y proporcione el ARN del rol que creó en el paso anterior.
2. En Incoming data, active Continuous ingestion. Seleccione Any order como modo de ingestión y proporcione la SQS queue URL de la cola conectada a su bucket. Para procesar únicamente los archivos de la cola y omitir el escaneo inicial de los archivos existentes en la ruta seleccionada, habilite Skip initial load. La cola debe utilizarse exclusivamente para este ClickPipe; consulte Crear una cola de Amazon SQS.
3. En Parse information, defina una Sorting key para la tabla de destino. Haga los ajustes necesarios en el esquema asignado y, a continuación, configure un rol para el usuario de la base de datos de ClickPipes.
4. Revise la configuración y haga clic en Create ClickPipe. A menos que esté habilitado Skip initial load, ClickPipes realizará un escaneo inicial de su bucket para cargar todos los archivos existentes que coincidan con la ruta especificada y luego comenzará a procesar los archivos a medida que se entreguen desde la cola eventos ObjectCreated:* coincidentes.