3

我有两个代码。

一个名为 testing.hql

select dt, '${hiveconf:var}' from temp_table;

另一个名为 testing.sh

temp= date --date='yesterday' +%y%m%d
hive -f testing.hql -hiveconf var=$temp

所以基本上我试图将日期值传递给查询,这样我就可以根据当前日期过滤我在查询中处理的数据。

我通过这个命令运行它。简单的。

./testing.sh

这不起作用,有人可以快速检查一下我在哪个部分犯了错误吗?

所以基本上我想做的是

select jobid from temp_table where dt >= '${hiveconf:var}'; 

所以我得到的jobid只是昨天完成的,因为shell脚本将参数设置为昨天的日期。

谢谢!

目前这会输出 dt 值之后的空白区域。

4

4 回答 4

4

弄清楚了。

2个简单的错误。

1)在做shell脚本时,执行的行必须用`包裹。所以我做了

    temp=`date --date='yesterday' +%y%m%d`
    hive -f testing.hql -hiveconf var=$temp

它就像一个魅力

2)在查询中,参数必须用双引号括起来。

    select jobid from temp_table where dt >= "${hiveconf:var}"; 

希望这个问题可以帮助其他有这个问题的人。

于 2013-11-13T19:17:29.970 回答
0

您可以为此使用 BeeTamer。它允许将结果(或部分结果)存储在变量中,并稍后在您的代码中使用此变量。

Beetamer 是 Hive 或 Impala 的宏扩展,允许扩展 Apache Hive 和 Cloudera Impala 引擎的功能。

select avg(a) from abc;
%capture MY_AVERAGE;
select * from abc2 where avg_var=#MY_AVERAGE#;

在这里,您将查询的平均值保存到宏变量 MY_AVERAGE 中,然后在第二个查询中重用它。

于 2014-09-29T17:40:42.540 回答
0

temp= 删除后有一个空格可能应该解决问题

temp=<blank>date ...
于 2015-01-10T21:20:14.710 回答
0

临时变量应声明如下,

temp=$(date --date='yesterday' +%y%m%d)
于 2016-03-29T05:16:18.013 回答