我想将current_day - 1存储在Hive
的变量中。我知道这个主题已有先前的主题,但是那里提供的解决方案首先建议在shell环境中定义hive外部的变量,然后在Hive中使用该变量。
Storing result of query in hive variable
我首先使用
获得了current_Date - 1 select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1);
然后我尝试了两种方法:
1. set date1 = ( select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1);
and
2. set hivevar:date1 = ( select date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1);
两种方法都抛出错误:
"ParseException line 1:82 cannot recognize input near 'select' 'date_sub' '(' in expression specification"
当我打印(1)代替昨天的日期时,选择查询将保存在变量中。 (2)方法抛出" {hivevar:dt_chk}未定义 "
我是Hive的新手,非常感谢任何帮助。感谢。
答案 0 :(得分:1)
Hive不支持将查询结果存储到变量的简单方法。您必须使用shell选项和hiveconf
。
date1 = $(hive -e "set hive.cli.print.header=false; select date_sub(from_unixtime(unix_timestamp(),'yyyy-MM-dd'),1);")
hive -hiveconf "date1"="$date1" -f hive_script.hql
然后在您的脚本中,您可以引用新创建的可变日期1
select '${hiveconf:date1}'
答案 1 :(得分:0)
经过大量研究,这可能是实现将变量设置为SQL输出的最佳方法:
INSERT OVERWRITE LOCAL DIRECTORY '<home path>/config/date1'
select CONCAT('set hivevar:date1=',date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'),1)) from <some table> limit 1;
source <home path>/config/date1/000000_0;
随后,您将可以在后续的SQL中使用${date1}
。
在这里,我们必须使用