[英]AWS Athena: partition by multiple columns in the same path
我正在尝试根据 S3 中的目录在 Athena 中创建一个表,如下所示:
folders/
id=1/
folder1/
folder2/
folder3/
dt=***/
dt=***/
id=2/
...
我想按两列划分。 一个是id
, on 是dt
。
所以最终我希望我的表有一个id
列,并且对于每个id
,所有dt
都在其子文件夹folder3
中。 有没有任何解决方案不会强迫我有这样的路径: ...\id=\dt=
?
我试图简单地在“分区依据”部分中设置这两列,其中位置是“文件夹”路径,然后该表没有数据。
然后,我尝试在查询表时使用注入并在 where 子句中设置特定的 id,但是该表包含我不需要的数据,并且似乎分区无法按预期工作。
表 DDL:
CREATE EXTERNAL TABLE IF NOT EXISTS `database`.`test_table` (
`col1` string,
`col2` string,
) PARTITIONED BY (
id string,
dt string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = ',',
'field.delim' = ','
) LOCATION 's3://folders/'
感谢任何帮助!
您可以使用类似“手动”添加分区
alter table your_table add if not exists
partition (id=1, dt=0)
location '/id=1/folder3/dt=0/'
partition (id=1, dt=1)
location 'id=1/folder3/dt=1'
...
您可以使用 aws cli 以这种方式在 s3 上以编程方式添加所有分区,以列出所有文件夹,遍历它们并使用上述查询将它们添加到分区表中(请参阅文档)。
另一种方法是使用带有自定义存储位置的分区投影,它的好处是为您提供更快的查询,并且无需在新数据到达 S3 时手动添加新分区(请参阅分区投影文档,特别是关于自定义 S3 位置的部分)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.