2017-03-18 110 views
0

我需要創建一個配置單元表(外部)來加載其他進程生成的數據。我需要按日期進行分區,但問題是,路徑中有一個隨機字符串。配置單元從動態位置加載外部表(分區)

示例輸入路徑:在目錄

/user/hadoop/output/FDQM9N4RCQ3V2ZYT/20170314/ 
/user/hadoop/output/FDPWMUVVBO2X74CA/20170315/ 
/user/hadoop/output/FDPGNC0ENA6QOF9G/20170316/ 
......... 
......... 

這裏第四字段是動態的(不能被猜到)。這些目錄中的每一個都有多個.gz文件

創建表時我會給出什麼位置?

CREATE EXTERNAL TABLE user (
userId BIGINT, 
type INT, 
date String 
) 
PARTITIONED BY (date String) 
LOCATION '/user/hadoop/output/'; 

這是正確的嗎?如果是的話,我如何根據日期(目錄中的最後一個字段)對它進行分區?

回答

1

由於您未使用分區約定,因此您必須手動添加每個分區。

  • 表格位置並不重要,但爲了清晰起見,請保留它的原樣。
  • 我建議使用date類型的分區或至少ISO格式,YYYY-MM-DD
  • 我不會使用date作爲列名(也不是int,string等)。

PARTITIONED BY (dt date) 

alter table user add if not exists partition (dt=date '2017-03-14') location '/user/hadoop/output/FDQM9N4RCQ3V2ZYT/20170314'; 
alter table user add if not exists partition (dt=date '2017-03-15') location '/user/hadoop/output/FDPWMUVVBO2X74CA/20170315'; 
alter table user add if not exists partition (dt=date '2017-03-16') location '/user/hadoop/output/FDPGNC0ENA6QOF9G/20170316'; 
+0

謝謝嘟嘟Markovitz – user3124284