簡體   English   中英

AWS Athena:按同一路徑中的多列分區

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM