Esta es una extensión de la función de tabla s3.
Permite procesar archivos de Amazon S3 y Google Cloud Storage Google Cloud Storage en paralelo con varios nodos de un clúster especificado. En el nodo iniciador, crea una conexión con todos los nodos del clúster, expande los asteriscos en la ruta de archivo de S3 y asigna dinámicamente cada archivo. En el nodo worker, consulta al iniciador cuál es la siguiente tarea que debe procesar y la procesa. Este proceso se repite hasta que se completan todas las tareas.
s3Cluster(cluster_name, url[, NOSIGN | access_key_id, secret_access_key,[session_token]][, format][, structure][, compression_method][, headers][, extra_credentials])
s3Cluster(cluster_name, named_collection[, option=value [,..]])
| Argumento | Descripción |
|---|
cluster_name | Nombre de un clúster que se utiliza para crear un conjunto de direcciones y parámetros de conexión para servidores remotos y locales. |
url | Ruta a un archivo o a un conjunto de archivos. Admite los siguientes comodines en modo de solo lectura: *, **, ?, {'abc','def'} y {N..M}, donde N, M son números y abc, def son cadenas. Para más información, consulta Comodines en la ruta. |
NOSIGN | Si se proporciona esta palabra clave en lugar de las credenciales, las solicitudes no se firmarán. |
access_key_id and secret_access_key | Claves que especifican las credenciales que se usarán con el endpoint indicado. Opcional. |
session_token | Token de sesión que se usará con las claves indicadas. Opcional si se pasan claves. |
format | El formato del archivo. |
structure | Estructura de la tabla. Formato: 'column1_name column1_type, column2_name column2_type, ...'. |
compression_method | El parámetro es opcional. Valores admitidos: none, gzip o gz, brotli o br, xz o LZMA, zstd o zst. De forma predeterminada, el método de compresión se detecta automáticamente según la extensión del archivo. |
headers | El parámetro es opcional. Permite pasar cabeceras en la solicitud a S3. Páselas en el formato headers(key=value), por ejemplo, headers('x-amz-request-payer' = 'requester'). Consulta aquí un ejemplo de uso. |
extra_credentials | Opcional. roleARN puede pasarse mediante este parámetro. Consulta aquí un ejemplo. |
Los argumentos también se pueden pasar mediante colecciones con nombre. En este caso, url, access_key_id, secret_access_key, format, structure y compression_method funcionan de la misma manera, y se admiten algunos parámetros adicionales:
| Argumento | Descripción |
|---|
filename | Se añade a la URL si se especifica. |
use_environment_credentials | Habilitado de forma predeterminada; permite pasar parámetros adicionales mediante las variables de entorno AWS_CONTAINER_CREDENTIALS_RELATIVE_URI, AWS_CONTAINER_CREDENTIALS_FULL_URI, AWS_CONTAINER_AUTHORIZATION_TOKEN, AWS_EC2_METADATA_DISABLED. |
no_sign_request | Deshabilitado de forma predeterminada. |
expiration_window_seconds | El valor predeterminado es 120. |
Una tabla con la estructura especificada para leer o escribir datos en el archivo indicado.
Seleccione los datos de todos los archivos de las carpetas /root/data/clickhouse y /root/data/database/ utilizando todos los nodos del clúster cluster_simple:
SELECT * FROM s3Cluster(
'cluster_simple',
'http://minio1:9001/root/data/{clickhouse,database}/*',
'minio',
'ClickHouse_Minio_P@ssw0rd',
'CSV',
'name String, value UInt32, polygon Array(Array(Tuple(Float64, Float64)))'
) ORDER BY (name, value, polygon);
Cuenta el número total de filas en todos los archivos del clúster cluster_simple:
Si la lista de archivos contiene rangos numéricos con ceros a la izquierda, usa la construcción con llaves para cada dígito por separado o ?.
Para entornos de producción, se recomienda usar colecciones con nombre. Aquí tienes un ejemplo:
CREATE NAMED COLLECTION creds AS
access_key_id = 'minio',
secret_access_key = 'ClickHouse_Minio_P@ssw0rd';
SELECT count(*) FROM s3Cluster(
'cluster_simple', creds, url='https://s3-object-url.csv',
format='CSV', structure='name String, value UInt32, polygon Array(Array(Tuple(Float64, Float64)))'
)
Acceso a buckets privados y públicos
Los usuarios pueden utilizar los mismos métodos documentados para la función s3 aquí.
Para conocer más detalles sobre cómo optimizar el rendimiento de la función s3, consulta nuestra guía detallada.