我有一个按天划分的表。我尝试通过设置
套hivevar:ds=2018-12-01;
然后使用**insert overwrite table xtable partition(day='${hivevar:ds}“)**效果不错
但当我喜欢下面
套hivevar:pd=date_add('${hivevar:ds}',-1);
然后**insert overwrite table xtable partition(day='${hivevar:pd}')**这是抛出错误。我认为问题是因为额外的报价,但无法找到如何解决。
错误是:
无法识别“date\u add('''2018'-'常量)附近的输入
代码:
set hivevar:ds=2018-12-01;
set hivevar:pd=date_add('${hivevar:ds}',-1);
set hive.exec.dynamic.partition.mode=nonstrict;
CREATE TABLE IF NOT EXISTS XTABLE (emp_id BIGINT, start_time STRING, end_time STRING)
PARTITIONED BY(day STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
--THIS IS WORKING FINE
INSERT OVERWRITE table XTABLE partition(day='${hivevar:ds}')
select distinct d.emp_id, d.start_time, d.end_time from
(
select emp_id, start_time, end_time from XTABLE where day='${hivevar:ds}'
) d;
--THIS IS THROWING AN ERROR cannot recognize input near ''date_add('' '2018' '-' in constant
--SEEMS PROBLEM IS WHILE SETTING THE VARIABLE
INSERT OVERWRITE table XTABLE partition(day='${hivevar:pd}')
select distinct d.emp_id, d.start_time, d.end_time from
(
select emp_id, start_time, end_time from XTABLE where day='${hivevar:pd}'
) d;
如果成功,它应该给出如下信息:
将数据加载到表xtable分区(day=2018-12-01)
2条答案
按热度按时间7lrncoxx1#
@saicharan设置变量时不能添加函数。我也遇到过类似的问题。
套hivevar:ds='应始终具有静态值'
要解决此问题,您需要创建一个简单的脚本,如下所示:
这应该能解决你的问题。让我知道它是否有效。
ckocjqey2#
目前,您正尝试使用静态分区在其规范中插入函数。您可以使用动态分区插入,在数据集中提供分区:
这将起作用,但可能会导致表满扫描,因为分区修剪不适用于函数。因此,最好的解决方案是在shell中计算date-1 day,并将其作为hql脚本中的参数传递:
在脚本中使用
'${hiveconf:ds}'