[英]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.