[英]Hive Table add partition to load all subdirectories
我正在使用配置單元(帶外部表)來處理存儲在amazon S3上的數據。
我的數據分區如下: group/team/dt/
(例如,數據文件可能存儲在路徑group=myGroup/team=myTeam/dt=20120603
)
我想處理幾個團隊(不同組)的數據。 由於RCOVER PARTITIONS需要很長時間,因此我想基於組和團隊值將多個分區添加到hive表中(即,給定該團隊中所有可用日期的組和團隊負載數據)。
我正在尋找的功能是:
CREATE EXTERNAL TABLE myData(
attr1 string, attr2 string, attr3 string)
PARTITIONED BY (group string, team string, dt string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://myBucket/${DATA_ROOT_DIR}';
-- Add paritions without specifying values for dt
ALTER TABLE myData ADD PARTITION (group='group1',team='team1') ;
ALTER TABLE myData ADD PARTITION (group='group2',team='team2') ;
謝謝!
在你告訴它們之前,Hive不知道這些目錄,因此沒有添加它們就無法訪問分區。
您可以編寫一個簡單的腳本來添加給定團隊/組的所有分區:
results = "ALTER TABLE something ADD "
groups.each do |group|
teams.each do |team|
partitions = listDirectories("s3n://bucket/", group, team)
partitions.each do |partition|
results += "PARTITION(group='#{group}', team='#{team}', dt='#{partition}')"
end
end
end
puts results
看起來你正在運行EMR(常規蜂巢甚至沒有RECOVER PARTITIONS),這幾乎就是RECOVER PARTITIONS所做的,但這樣你至少可以獲得更多的控制權。
另一個選項是在添加數據時添加分區,並確保所有分區都保持最新。
請檢查動態分區插入 - https://cwiki.apache.org/confluence/display/Hive/Tutorial#Tutorial-DynamicpartitionInsert
在此方法中,列本身成為分區。 這有效地避免了在insert語句中對分區名稱進行硬編碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.