Hive 希望在配置单元中设置可重用变量

Hive 希望在配置单元中设置可重用变量,hive,hiveql,Hive,Hiveql,我希望设置一个如下所示的变量,名为today\u date,然后能够在整个查询中将其作为变量重用。下面的代码抛出一个错误 set today_date = date_format(date_sub(current_date, 1), 'YYYYMMdd') select account from table where data_date = today_date 第一个命令应以分号结尾: set today_date=date_format(date_sub(current_date, 1

我希望设置一个如下所示的变量,名为
today\u date
,然后能够在整个查询中将其作为变量重用。下面的代码抛出一个错误

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

select account
from table
where data_date = today_date

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

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中计算它并传递给您的配置单元脚本,如下面的回答所示:

您仍然需要在
集合
行的末尾放一个分号,用
${}
包围您的变量并使用适当的名称空间

请注意,在定义变量时,这将不执行
date\u format()
函数。使用变量时,SQL代码将按原样复制。与其说它是一个变量,不如说它是一个宏

此外,蜂巢有多个。 最简单的两个选项是:定义变量时不要太详细,使用变量时要更详细(hiveconf命名空间):

或者反过来(hivevar名称空间)


不确定您需要什么。更清晰@VamsiPrabhalahow正在运行吗?从Beeline或Hive CLI、Hue、Ambari或其他东西调用的脚本?我正在通过alation运行它。不确定这是否有帮助?
set today_date = date_format(date_sub(current_date, 1), 'YYYYMMdd');
select account from table where data_date = ${hiveconf:today_date};
set hivevar:today_date = date_format(date_sub(current_date, 1), 'YYYYMMdd');
select account from table where data_date = ${today_date};