动态分区+在hive上创建

jgwigjjp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(768)

我正在尝试从另一个具有 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-语法

l7wslrjt

l7wslrjt1#

由于您已经知道目标表的完整架构,请尝试先创建它,然后使用load data命令填充它:

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命令。

gupuwyp2

gupuwyp22#

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 ;
以防分区相似。

相关问题