簡體   English   中英

Hive Table添加分區以加載所有子目錄

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

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