将数据从一个表复制到另一个分区表


%hive
INSERT INTO NEWPARTITIONING partition(year(L_SHIPDATE)) select * from LINEITEM;

我想将行项目中的数据复制到分区表NEWPARTITIONING,但我得到了以下错误:

第1:54行无法识别语句中"("select"*"附近的输入。

不明白发生此错误的原因。有人能给我一些想法吗

Hive支持DYNAMIC

STATIC分区规范只允许列名或列列表(对于动态分区加载(,如果您需要函数,请在选择中计算它,请参阅下面的示例:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
insert into table NEWPARTITIONING partition (partition_column)
select i.col1,
...
i.colN,
year(L_SHIPDATE) as partition_column --Partition should be the last in column list
from LINEITEM i 

或者,您可以以partition(partition_column='value')的形式指定静态分区,在这种情况下,您不需要选择分区表达式:

insert into table NEWPARTITIONING partition (partition_column='2020-01-01')
select i.col1,
...
i.colN
from LINEITEM i 
where year(L_SHIPDATE)  = '2020-01-01' 

在静态和动态这两种情况下,配置单元都不支持分区规范中的函数。函数可以在查询中计算(动态加载(,也可以在包装外壳中计算,并作为参数传递给脚本(用于静态分区(。

最新更新