问题描述
%hive
INSERT INTO NEWPARTITIONING partition(year(L_SHIPDATE)) select * from LINEITEM;
我想将订单项中的数据复制到分区表NEWPARTITIONING
,但出现以下错误:
1:54行无法识别语句中')''select''*'附近的输入。
不明白为什么会发生此错误。谁能给我一些想法
解决方法
Hive支持动态或静态分区加载。
分区规范仅允许使用列名或列列表(用于动态分区加载),如果需要功能,请在选择中进行计算,请参见以下示例:
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'
在STATIC和DYNAMIC两种情况下,Hive不支持分区规范中的功能。函数可以在查询中计算(动态负载),也可以在包装器外壳中计算,然后作为参数传递给脚本(用于静态分区)。