寻找在蜂巢中设置一个可重用的变量

时间:2018-07-23 20:38:52

标签: hive hiveql

我希望像下面那样设置一个名为gl.viewport(x, y, width, height)的变量,然后能够在整个查询中将其作为变量重复使用。以下引发错误。

today_date

2 个答案:

答案 0 :(得分:0)

第一个命令应以分号结尾:

set today_date=date_format(date_sub(current_date, 1), 'YYYYMMdd');

并且应该像这样使用变量:

select account
from table
where data_date=${hivevar:today_date};

set命令将不计算表达式,它将被替换。结果查询将是

select account
from table
where data_date = date_format(date_sub(current_date, 1), 'YYYYMMdd');

如果您希望已经计算出变量,则可以在shell中对其进行计算,然后像下面的答案一样传递给您的Hive脚本:https://stackoverflow.com/a/37821218/2700344

答案 1 :(得分:0)

您仍然需要在set行的末尾加上分号,用${}包围变量并使用适当的命名空间。

请注意,定义变量后,这将执行date_format()函数。使用变量时,SQL代码将照原样复制。可以将它视为宏而不是变量。

此外,Hive具有多个variable namespaces。 最简单的2个选项是,在定义变量时不那么冗长,而在使用它时则更冗长(hiveconf名称空间):

set today_date = date_format(date_sub(current_date, 1), 'YYYYMMdd');
select account from table where data_date = ${hiveconf:today_date};

或相反(hivevar名称空间)

set hivevar:today_date = date_format(date_sub(current_date, 1), 'YYYYMMdd');
select account from table where data_date = ${today_date};