You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Redshift数据卸载至S3分区时,如何避免分区列名出现在文件夹名称中

解决Redshift UNLOAD到S3时分区文件夹名称不带key的问题

这个需求我之前刚好碰到过,其实Redshift的UNLOAD命令里有个专门的参数可以轻松搞定!

默认情况下,当你用PARTITION BY (dt)进行分区时,Redshift会采用KEY_VALUE的分区格式,也就是生成dt=2020-01-01/这样的文件夹。要改成只保留分区值的格式,只需要添加PARTITION_FORMAT 'VALUES'参数就行。

具体示例对比

  • 默认分区命令(生成key=value格式)
UNLOAD ('SELECT col1, col2 FROM your_target_table')
TO 's3://your-bucket-name/your-base-path/'
IAM_ROLE 'arn:aws:iam::123456789012:role/your-redshift-iam-role'
PARTITION BY (dt)
FORMAT AS PARQUET;

执行后会生成类似s3://your-bucket-name/your-base-path/dt=2020-01-01/的文件夹结构。

  • 修改后的命令(仅保留分区值)
UNLOAD ('SELECT col1, col2 FROM your_target_table')
TO 's3://your-bucket-name/your-base-path/'
IAM_ROLE 'arn:aws:iam::123456789012:role/your-redshift-iam-role'
PARTITION BY (dt)
PARTITION_FORMAT 'VALUES'  -- 关键就是这个参数
FORMAT AS PARQUET;

这样执行后,就会生成s3://your-bucket-name/your-base-path/2020-01-01/的文件夹结构,完全符合你的需求。

注意事项

  • 确保你的Redshift集群版本支持PARTITION_FORMAT参数,一般2021年及以后的版本都已经包含这个功能,如果是较老的集群可能需要先升级版本。
  • 分区列的类型会影响生成的文件夹名称格式,比如你的dt是DATE类型,就会自动生成yyyy-mm-dd格式的字符串作为文件夹名,不需要额外转换。

内容的提问来源于stack exchange,提问作者marcia12

火山引擎 最新活动