日付でパーティション分割された Hive テーブルがあります。過去 'n' 日間のパーティション (またはパーティションのカスタム リスト) を選択的に上書きできるようにしたいと考えています。
パーティションごとに「INSERT OVERWRITE DIRECTORY」ステートメントを書かずにそれを行う方法はありますか?
どんな助けでも大歓迎です。
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;