gcs 表函数
提供了一个表状接口来从 Google Cloud Storage 中 SELECT
和 INSERT
数据。需要 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'
— 字符串。GCSGCS 路径的格式为:Google XML API 的端点与 JSON API 不同:
而不是 ~~https://storage.cloud.google.com~~。 :::
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
。
另见