4

Amazon S3 に保存されているデータを処理するために (外部テーブルを使用して) ハイブを使用しています。

私のデータは次のように分割されています: group/team/dt/(たとえば、データファイルはパスに保存されている可能性がありますgroup=myGroup/team=myTeam/dt=20120603)

複数のチーム (異なるグループ) のデータを処理したいと考えています。RCOVER PARTITIONS には時間がかかるため、グループとチームの値に基づいて複数のパーティションをハイブ テーブルに追加したいと考えています (つまり、そのチームで利用可能なすべての日付のグループとチームの負荷データが与えられた場合)。

私が探している機能は次のとおりです。

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') ;

ありがとう!

4

2 に答える 2

5

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が行うこととほぼ同じですが、この方法で少なくともより詳細に制御できます。

もう1つのオプションは、データを追加するときにパーティションを追加し、すべてのパーティションが最新の状態に保たれていることを確認することです。

于 2012-06-13T15:03:22.267 に答える
0

動的パーティションの挿入を確認してください - https://cwiki.apache.org/confluence/display/Hive/Tutorial#Tutorial-DynamicpartitionInsert

この方法では、列自体がパーティションになります。これにより、insert ステートメントでのパーティション名のハードコーディングを効果的に回避できます。

于 2012-08-31T07:22:59.633 に答える