跳到主要内容
跳到主要内容

s3Cluster 表函数

这是对 s3 表函数的扩展。

允许在指定集群中的多个节点上并行处理来自 Amazon S3Google 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文件或一组文件的路径。在只读模式下支持以下通配符:***?{'abc','def'}{N..M},其中 NM 为数字,abcdef 为字符串。更多信息参见路径中的通配符
NOSIGN如果在凭据位置提供此关键字,则所有请求都将不进行签名。
access_key_id and secret_access_key指定与给定 endpoint(端点)一起使用的凭据密钥。可选。
session_token与给定密钥一起使用的会话令牌。在传递密钥时为可选项。
format文件的格式
structure表的结构。格式为 'column1_name column1_type, column2_name column2_type, ...'
compression_method可选参数。支持的取值:nonegzipgzbrotlibrxzLZMAzstdzst。默认情况下,将根据文件扩展名自动检测压缩方法。
headers可选参数。允许在 S3 请求中传递请求头。以 headers(key=value) 的格式传入,例如 headers('x-amz-request-payer' = 'requester')。使用示例参见此处
extra_credentials可选。可以通过此参数传递 roleARN。示例参见此处

参数也可以通过命名集合传递。在这种情况下,urlaccess_key_idsecret_access_keyformatstructurecompression_method 的行为相同,并且还支持一些额外参数:

参数描述
filename如果指定,则会追加到 url 后面。
use_environment_credentials默认启用,允许通过环境变量 AWS_CONTAINER_CREDENTIALS_RELATIVE_URIAWS_CONTAINER_CREDENTIALS_FULL_URIAWS_CONTAINER_AUTHORIZATION_TOKENAWS_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 函数性能的更多信息,请参阅详细指南