这是对 s3 表函数的扩展。
它允许在指定集群中由多个节点并行处理来自 Amazon S3 和 Google Cloud Storage Google Cloud Storage 的文件。在发起节点上,它会与集群中的所有节点建立连接,展开 S3 文件路径中的星号,并动态分发每个文件。在工作节点上,它会向发起节点请求下一个要处理的任务并执行处理。此过程会不断重复,直到所有任务都完成。
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 [,..]])
| 参数 | 描述 |
|---|
cluster_name | 用于构建远程和本地服务器地址集合及连接参数的集群名称。 |
url | 文件或一组文件的路径。在只读模式下支持以下 wildcards:*、**、?、{'abc','def'} 和 {N..M},其中 N、M 表示数字,abc、def 表示字符串。更多信息请参见路径中的通配符。 |
NOSIGN | 如果用此关键字代替 credentials,则所有请求都不会被签名。 |
access_key_id and secret_access_key | 用于指定在给定端点上使用的 credentials 的 key。可选。 |
session_token | 与给定 keys 一起使用的 session 标记。传递 keys 时可选。 |
format | 文件的 format。 |
structure | 表的结构。格式为 'column1_name column1_type, column2_name column2_type, ...'。 |
compression_method | 此参数为可选。支持的值:none、gzip 或 gz、brotli 或 br、xz 或 LZMA、zstd 或 zst。默认情况下,会根据文件扩展名自动检测压缩方法。 |
headers | 此参数为可选。允许在 S3 请求中传递请求头。请按 headers(key=value) 格式传递,例如 headers('x-amz-request-payer' = 'requester')。有关用法示例,请参见此处。 |
extra_credentials | 可选。可通过此参数传递 roleARN。示例请参见此处。 |
参数也可以通过 命名集合 传递。在这种情况下,url、access_key_id、secret_access_key、format、structure、compression_method 的用法相同,并且还支持一些额外参数:
| 参数 | 描述 |
|---|
filename | 如果指定,则追加到 url。 |
use_environment_credentials | 默认启用,允许通过环境变量 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI、AWS_CONTAINER_CREDENTIALS_FULL_URI、AWS_CONTAINER_AUTHORIZATION_TOKEN、AWS_EC2_METADATA_DISABLED 传递额外参数。 |
no_sign_request | 默认禁用。 |
expiration_window_seconds | 默认值为 120。 |
一个具有指定结构的表,用于读取或写入指定文件中的数据。
使用 cluster_simple 集群中的所有节点,查询 /root/data/clickhouse 和 /root/data/database/ 文件夹中所有文件的数据:
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);
统计集群 cluster_simple 中所有文件的总行数:
如果文件列表中包含带前导零的数字范围,请对每一位分别使用花括号写法,或使用 ?。
对于生产环境,建议使用 命名集合。示例如下:
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)))'
)
用户可以采用与此处文档中 s3 函数相同的访问方式。
有关如何优化 s3 函数性能的详细信息,请参阅详细指南。