我希望像下面那样设置一个名为gl.viewport(x, y, width, height)
的变量,然后能够在整个查询中将其作为变量重复使用。以下引发错误。
today_date
答案 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};