我们目前会生成每日CSV导出,并将其上传到S3存储桶,并采用以下结构:
<report-name>
|--reportDate-<date-stamp>
|-- part0.csv.gz
|-- part1.csv.gz
我们希望能够运行按每日导出分区的报告。
根据this页面,您可以通过一个密钥对Redshift Spectrum中的数据进行分区,该密钥基于Spectrum表格中的数据源S3文件夹。但是,从示例中,您似乎需要为每个分区ALTER
语句:
alter table spectrum.sales_part
add partition(saledate='2008-01-01')
location 's3://bucket/tickit/spectrum/sales_partition/saledate=2008-01/';
alter table spectrum.sales_part
add partition(saledate='2008-02-01')
location 's3://awssampledbuswest2/tickit/spectrum/sales_partition/saledate=2008-02/';
有没有办法设置表格,以便数据由它来自的文件夹自动分区,或者我们是否需要每天的工作ALTER
表格来添加当天的分区?
答案 0 :(得分:6)
解决方案1:
每个表最多可以创建20000个分区。您可以创建一次性脚本来为所有未来的s3分区文件夹添加分区(最大20k)。
例如。
如果文件夹s3:// bucket / ticket / spectrum / sales_partition / saledate = 2017-12 /不存在,您甚至可以为此添加分区。
alter table spectrum.sales_part
add partition(saledate='2017-12-01')
location 's3://bucket/tickit/spectrum/sales_partition/saledate=2017-12/';
解决方案2:
答案 1 :(得分:0)
另一种精确的解决方法: 创建一个Lambda作业,该作业在S3存储桶的ObjectCreated通知上触发,并运行SQL添加分区:
更改表tblname如果不存在分区(分区子句),则添加s3:// mybucket / localtion