Skip to main content
提供类似表的接口,可对 Google Cloud Storage 中的数据执行 SELECT 和 INSERT。需要 Storage Object User IAM role。 这是 s3 表函数 的别名。 如果你的集群中有多个副本,可以改用 s3Cluster 函数 (可与 GCS 配合使用) 来并行执行插入操作。

语法

GCSGCS 表函数通过 GCS XML API 和 HMAC 密钥与 Google Cloud Storage 集成。 有关端点和 HMAC 的更多信息,请参阅 Google 互操作性文档。

参数

GCSGCS 路径格式如下,因为 Google XML API 的端点与 JSON API 不同:
而不是 ~~https://storage.cloud.google.com~~。
参数也可以通过命名集合传递。在这种情况下,url、format、structure、compression_method、partition_strategy 的用法相同,并且还支持一些额外参数:

返回值

一个具有指定结构的表,用于读取指定文件中的数据或向其中写入数据。

示例

从 GCS 文件 https://storage.googleapis.com/clickhouse_public_datasets/my-test-bucket-768/data.csv.gz 中选取前两行。压缩方法会根据 .gz 文件扩展名自动识别:
与上面的查询相同,不过这里显式指定了 gzip 压缩方法,而不是依赖自动检测:

用法

假设我们在 GCS 上有多个文件,其 URI 如下: 统计文件名以 1 到 3 结尾的文件中的行数:
统计这两个目录中所有文件的总行数:
如果文件列表中包含带前导零的数字范围,请对每一位数字分别使用花括号,或使用 ?。
统计名为 file-000.csv、file-001.csv、…、file-999.csv 的文件中的总行数:
向文件 test-data.csv.gz 中插入数据:
将现有表中的数据插入文件 test-data.csv.gz:
可以使用 Glob ** 递归遍历目录。参见下面的示例,它会从 my-test-bucket-768 目录中递归拉取所有文件:
以下内容会递归地从 my-test-bucket 目录下任意文件夹中的所有 test-data.csv.gz 文件获取数据:
对于生产环境,建议使用命名集合。示例如下:

分区写入

如果在向 GCS 表插入数据时指定了 PARTITION BY 表达式,系统会为每个分区值分别创建一个文件。将数据拆分到不同文件中,有助于提升读取操作的效率。 包含 {_partition_id} 的路径意味着使用 wildcard 分区策略,因此以下示例中显式设置 partition_strategy='wildcard' 是可选的。包含其他 glob 的路径不使用分区策略,并会忽略 PARTITION BY。不含 glob 的路径在 file_like_engine_default_partition_strategy 为 hive 时使用 hive;否则不使用分区策略。 示例
  1. 在 key 中使用分区 ID 会创建单独的文件:
因此,数据会写入三个文件:file_x.csv、file_y.csv 和 file_z.csv。
  1. 在 存储桶 名称中使用分区 ID,会在不同的 存储桶 中创建文件:
因此,数据会被写入不同存储桶中的三个文件:my_bucket_1/file.csv、my_bucket_10/file.csv 和 my_bucket_20/file.csv。
最后修改于 2026年8月27日