9

日付でパーティション分割された Hive テーブルがあります。過去 'n' 日間のパーティション (またはパーティションのカスタム リスト) を選択的に上書きできるようにしたいと考えています。

パーティションごとに「INSERT OVERWRITE DIRECTORY」ステートメントを書かずにそれを行う方法はありますか?

どんな助けでも大歓迎です。

4

2 に答える 2

23

Hive は動的パーティション分割をサポートしているため、パーティションがソース フィールドの 1 つにすぎないクエリを作成できます。

INSERT OVERWRITE TABLE dst partition (dt) 
SELECT col0, col1, ... coln, dt from src where ...

where 句は、上書きする dt の値を指定できます。

パーティション フィールド (この場合は dt) をソースからのリストの最後に含めるだけですSELECT *, dt。dt フィールドが既にソースの一部である場合や、さらにSELECT *,my_udf(dt) as dtは .

デフォルトでは、Hive は指定されたパーティションの少なくとも 1 つを static にする必要がありますが、nonstrictにすることもできます。したがって、上記のクエリでは、実行前に次のように設定できます。

set hive.exec.dynamic.partition.mode=nonstrict;
于 2013-09-09T16:15:36.990 に答える