web-dev-qa-db-ja.com

動的パーティション分割+ HIVEでのCREATEAS

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

13
Adriano Foschi

ターゲットテーブルの完全なスキーマはすでにわかっているので、最初に作成して、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コマンドが必要です。

21
Simplefish
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;

パーティショニングが類似している場合。

2
Deb