hive将数据从一张表复制到另一张分区表上line 1:54 cannot recognize input near ')' 'select' '*' in statement

dced5bon  于 2021-04-03  发布在  Hive
关注(0)|答案(1)|浏览(2597)
%hive
INSERT INTO NEWPARTITIONING partition(year(L_SHIPDATE)) select * from LINEITEM;

我想把行项中的数据复制到分区表NEWPARTITIONING中,但我得到了以下错误。
line 1:54 cannot recognize input near ')' 'select' '*' in statement.
不明白为什么会出现这个错误.有谁能给我提供一些想法

waxmsbnn

waxmsbnn1#

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'

在这两种情况下--静态和动态,hive不支持分区规范中的函数。函数可以在查询中计算(动态负载),或者在 Package 器中计算,并作为一个参数传递给脚本(静态分区)。

相关问题