Hive の動的パーティションを使用していますが、新しいパーティションを追加しない限り列にデータが入力されないという問題があります。デモ用に小さなデモ例を作成しました。
1. (年 int、月 int、日 int) で分割されたテーブルの野菜 (name string、count bigint) を作成します。 2. 外部テーブル dataForVeg (name string、count bigint、weight string、year int、month int、day int) を作成します。' ' で終了する行形式の区切りフィールド。 3. data1 を dataforveg にロードする 4. hive.exec.dynamic.partition.mode=nonstrict を設定します。 5. テーブルの野菜パーティション (年、月、日) に挿入します。dataforveg から名前、カウント、年、月、日を選択します。 6. hive> select * from vegetables where day='5'; トマト 5 2013 11 5 キャベツ 3 2013 11 5 7. hive> alter table vegetables add columns(weight double); 8. hive> 野菜について説明します。 名前文字列 bigint を数える 体重倍増 年整数 月の整数 日の整数 9. hive> select * from vegetables where day='5'; トマト 5 NULL 2013 11 5 キャベツ 3 NULL 2013 11 5 hive> select * from vegetables where day='4'; じゃがいも 2 NULL 2013 11 4 10. 上書き data2 を dataforveg にロードします。 11. hive> select * from dataforveg; ニンジン 10 5 2013 11 5 コショウ 15 2 2013 11 5 12. hive> select * from vegetables where day='5'; トマト 5 NULL 2013 11 5 キャベツ 3 NULL 2013 11 5 にんじん 10 NULL 2013 11 5 コショウ 15 NULL 2013 11 5 13.上書きデータ3をdataforvegにロード ハイブ > dataforveg から * を選択します。 ビート 4 1 2013 11 6 ブロッコリー 3 1 2013 11 6 14. ハイブ> 野菜から * を選択; じゃがいも 2 NULL 2013 11 4 トマト 5 NULL 2013 11 5 キャベツ 3 NULL 2013 11 5 にんじん 10 NULL 2013 11 5 コショウ 15 NULL 2013 11 5 ビート 4 1.0 2013 11 6 ブロッコリー 3 1.0 2013 11 6
例からわかるように、新しいパーティションを追加するとデータが更新されます。質問: 手順 12 でニンジンとコショウの新しいフィールド「重量」の値を更新する方法はありますか? つまり、新しく追加された列を既存のパーティションのデータで埋める方法はありますか?