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

gcs 表函数

提供了一个表状接口来从 Google Cloud StorageSELECTINSERT 数据。需要 Storage Object User IAM 角色

这是 s3 表函数 的别名。

如果在您的集群中有多个副本,您可以使用 s3Cluster 函数(该函数支持 GCS)来并行化插入。

语法

GCS

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

参数

  • url — 文件的存储桶路径。在只读模式下支持以下通配符: *, **, ?, {abc,def}{N..M},其中 N, M — 数字, 'abc', 'def' — 字符串。
    GCS

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

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

  • NOSIGN — 如果在凭据的位置提供此关键词,则所有请求将不被签名。
  • hmac_keyhmac_secret — 指定与给定端点一起使用的凭据的密钥。可选。
  • format — 文件的 格式
  • structure — 表的结构。格式为 'column1_name column1_type, column2_name column2_type, ...'
  • compression_method — 此参数是可选的。支持的值: nonegzipgzbrotlibrxzLZMAzstdzst。默认情况下,它将根据文件扩展名自动检测压缩方法。

参数也可以使用 命名集合 传递。在这种情况下,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.csvfile_z.csv

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

结果是数据写入不同存储桶中的三个文件: my_bucket_1/file.csvmy_bucket_10/file.csvmy_bucket_20/file.csv

另见