gcs 表函数
提供一个类表的接口,以 SELECT
和 INSERT
数据到 Google Cloud Storage。需要 Storage Object User
IAM 角色。
这是 s3 表函数 的别名。
如果您的集群中有多个副本,您可以使用 s3Cluster 函数(可与 GCS 一起使用)来并行插入。
语法
GCS 表函数通过使用 GCS XML API 和 HMAC 密钥与 Google Cloud Storage 集成。 有关端点和 HMAC 的更多详细信息,请参见 Google 互操作性文档。
参数
参数 | 描述 |
---|---|
url | 文件的存储桶路径。支持只读模式下的以下通配符: * ,** ,? ,{abc,def} 和 {N..M} ,其中 N ,M 是数字,'abc' ,'def' 是字符串。 |
NOSIGN | 如果在凭证位置提供此关键字,则所有请求将不被签名。 |
hmac_key 和 hmac_secret | 指定要与给定端点一起使用的凭证的密钥。可选。 |
format | 文件的 格式。 |
structure | 表的结构。格式为 'column1_name column1_type, column2_name column2_type, ...' 。 |
compression_method | 该参数是可选的。支持的值: none ,gzip 或 gz ,brotli 或 br ,xz 或 LZMA ,zstd 或 zst 。默认情况下,它将根据文件扩展名自动检测压缩方法。 |
参数还可以通过 命名集合 传递。在这种情况下,url
、format
、structure
、compression_method
的工作方式是相同的,并且支持一些额外的参数:
参数 | 描述 |
---|---|
access_key_id | hmac_key ,可选。 |
secret_access_key | hmac_secret ,可选。 |
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。 |
返回值
一个具有指定结构的表,用于在指定文件中读取或写入数据。
示例
从 GCS 文件 https://storage.googleapis.com/my-test-bucket-768/data.csv
中选择前两行:
类似但来自使用 gzip
压缩方法的文件:
使用
假设我们在 GCS 上有多个文件,具有以下 URI:
- 'https://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_1.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_2.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_3.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/some_prefix/some_file_4.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_1.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_2.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_3.csv'
- 'https://storage.googleapis.com/my-test-bucket-768/another_prefix/some_file_4.csv'
计算以数字 1 到 3 结尾的文件中的行数:
计算这两个目录中所有文件的行数:
如果您的文件列表包含带有前导零的数字范围,请为每个数字单独使用带括号的构造,或使用 ?
。
计算名为 file-000.csv
,file-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
表达式,则会为每个分区值创建一个单独的文件。将数据拆分为单独的文件有助于提高读取操作的效率。
示例
- 在键中使用分区 ID 创建单独的文件:
最终数据写入三个文件:file_x.csv
,file_y.csv
,和 file_z.csv
。
- 在桶名称中使用分区 ID 在不同桶中创建文件:
最终数据写入三个不同桶中的文件:my_bucket_1/file.csv
,my_bucket_10/file.csv
,和 my_bucket_20/file.csv
。