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

gcs 表函数

提供一个类表的接口,以 SELECTINSERT 数据到 Google Cloud Storage。需要 Storage Object User IAM 角色

这是 s3 表函数 的别名。

如果您的集群中有多个副本,您可以使用 s3Cluster 函数(可与 GCS 一起使用)来并行插入。

语法

GCS

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

参数

参数描述
url文件的存储桶路径。支持只读模式下的以下通配符: ***?{abc,def}{N..M},其中 NM 是数字,'abc''def' 是字符串。
NOSIGN如果在凭证位置提供此关键字,则所有请求将不被签名。
hmac_keyhmac_secret指定要与给定端点一起使用的凭证的密钥。可选。
format文件的 格式
structure表的结构。格式为 'column1_name column1_type, column2_name column2_type, ...'
compression_method该参数是可选的。支持的值: nonegzipgzbrotlibrxzLZMAzstdzst。默认情况下,它将根据文件扩展名自动检测压缩方法。
GCS

GCS 路径的格式与 Google XML API 的端点格式不同于 JSON API:

而不是 ~~https://storage.cloud.google.com~~。

参数还可以通过 命名集合 传递。在这种情况下,urlformatstructurecompression_method 的工作方式是相同的,并且支持一些额外的参数:

参数描述
access_key_idhmac_key,可选。
secret_access_keyhmac_secret,可选。
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。

返回值

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

示例

从 GCS 文件 https://storage.googleapis.com/my-test-bucket-768/data.csv 中选择前两行:

类似但来自使用 gzip 压缩方法的文件:

使用

假设我们在 GCS 上有多个文件,具有以下 URI:

计算以数字 1 到 3 结尾的文件中的行数:

计算这两个目录中所有文件的行数:

危险

如果您的文件列表包含带有前导零的数字范围,请为每个数字单独使用带括号的构造,或使用 ?

计算名为 file-000.csvfile-001.csv,...,file-999.csv 的文件中的总行数:

将数据插入到文件 test-data.csv.gz 中:

从现有表中将数据插入到文件 test-data.csv.gz 中:

通配符 ** 可用于递归遍历目录。考虑下面的示例,它将递归获取 my-test-bucket-768 目录的所有文件:

下面从 my-test-bucket 目录中任何文件夹的所有 test-data.csv.gz 文件获取数据:

对于生产用例,建议使用 命名集合。以下是示例:

分区写入

如果在将数据插入到 GCS 表时指定了 PARTITION BY 表达式,则会为每个分区值创建一个单独的文件。将数据拆分为单独的文件有助于提高读取操作的效率。

示例

  1. 在键中使用分区 ID 创建单独的文件:

最终数据写入三个文件:file_x.csvfile_y.csv,和 file_z.csv

  1. 在桶名称中使用分区 ID 在不同桶中创建文件:

最终数据写入三个不同桶中的文件:my_bucket_1/file.csvmy_bucket_10/file.csv,和 my_bucket_20/file.csv