web-dev-qa-db-ja.com

Hive動的パーティション

動的パーティションを使用してパーティションテーブルを作成しようとしていますが、問題に直面しています。 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";
  • テーブルdemo_stgもデータで満たされているため、空ではありません。

手伝ってくれてありがとう :)

10
Baeumla

選択を変更する必要があります。

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;

これでうまくいくと思います。

15
Tanveer

パーティション列は、選択クエリの最後の列である必要があります。

そして、パーティションをtrueに設定する以外に、モードをnonstrictに設定する必要があります。

set Hive.exec.dynamic.partition.mode=nonstrict
8
Azam Khan