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

fumotvh3  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(381)

我想设置一个如下的变量,叫做 today_date ,然后能够在整个查询过程中将其作为变量重用。下面的抛出一个错误。

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

select account
from table
where data_date = today_date
tkclm6bt

tkclm6bt1#

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

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中计算它并传递给您的配置单元脚本,如下所示:https://stackoverflow.com/a/37821218/2700344

rmbxnbpk

rmbxnbpk2#

你仍然需要在结尾加一个分号 set 行,用 ${} 并使用适当的命名空间。
请注意,这不会执行 date_format() 定义变量时的函数。当您使用这个变量时,sql代码只会按原样复制。与其说它是一个变量,不如说它是一个宏。
此外,hive有多个变量名称空间。最简单的两个选项是,在定义变量时不太详细,但在使用变量时更详细(hiveconf namespace):

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};

相关问题