動的パーティションを使用してパーティションテーブルを作成しようとしていますが、問題に直面しています。 Hortonworks Sandbox 2.0でHive 0.12を実行しています。
set Hive.exec.dynamic.partition=true;
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country
FROM demo_stg t;
しかし、それは動作しません..エラーが発生しています。
以下にテーブルを作成するクエリを示しますdemo_stg:
create table demo_stg
(
country STRING,
stadt STRING,
geograph_breite FLOAT,
id INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\073";
そしてdemo_tab:
CREATE TABLE demo_tab
(
stadt STRING,
geograph_breite FLOAT,
id INT
)
PARTITIONED BY (land STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\073";
手伝ってくれてありがとう :)
選択を変更する必要があります。
set Hive.exec.dynamic.partition=true;
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country
FROM demo_stg t;
デモステージングのどの列でパーティション分割を実行するか、またはデモのどの列が土地に対応するかはわかりません。ただし、selectの最後の列にはデモテーブルの列名がidであるため、selectを次のように記述する必要があります。
INSERT OVERWRITE TABLE demo_tab PARTITION (land)
SELECT stadt, geograph_breite, id, t.country,t.id as land
FROM demo_stg t;
これでうまくいくと思います。
パーティション列は、選択クエリの最後の列である必要があります。
そして、パーティションをtrueに設定する以外に、モードをnonstrictに設定する必要があります。
set Hive.exec.dynamic.partition.mode=nonstrict