CREATE AS
とHiveCLIの動的パーティショニングを使用して別のテーブルから新しいテーブルを作成しようとしています。私はこの例があるHive公式ウィキから学んでいます:
CREATE TABLE T (key int, value string)
PARTITIONED BY (ds string, hr int) AS
SELECT key, value, ds, hr+1 hr1
FROM srcpart
WHERE ds is not null
And hr>10;
しかし、私はこのエラーを受け取りました:
失敗:SemanticException [エラー10065]:
CREATE TABLE AS SELECTコマンドは、ターゲット表の列のリストを指定できません
出典: https://cwiki.Apache.org/confluence/display/Hive/DynamicPartitions#DynamicPartitions-Syntax
ターゲットテーブルの完全なスキーマはすでにわかっているので、最初に作成して、LOADDATAコマンドを入力してみてください。
SET Hive.exec.dynamic.partition.mode=nonstrict;
CREATE TABLE T (key int, value string)
PARTITIONED BY (ds string, hr int);
INSERT OVERWRITE TABLE T PARTITION(ds, hr)
SELECT key, value, ds, hr+1 AS hr
FROM srcpart
WHERE ds is not null
And hr>10;
注:完全な動的パーティション挿入を実行しているため、setコマンドが必要です。
SET Hive.exec.dynamic.partition.mode=nonstrict;
CREATE TABLE T (key int, value string)
PARTITIONED BY (ds string, hr int);
INSERT OVERWRITE TABLE T PARTITION(ds, hr)
SELECT key, value, ds, hr+1 AS hr
FROM srcpart
WHERE ds is not null
And hr>10;
上記のコードでは、Create
ステートメントの代わりに次を使用します:CREATE TABLE T like srcpart
;
パーティショニングが類似している場合。