我想设置一个如下的变量,叫做 today_date ,然后能够在整个查询过程中将其作为变量重用。下面的抛出一个错误。
today_date
set today_date = date_format(date_sub(current_date, 1), 'YYYYMMdd') select account from table where data_date = today_date
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
rmbxnbpk2#
你仍然需要在结尾加一个分号 set 行,用 ${} 并使用适当的命名空间。请注意,这不会执行 date_format() 定义变量时的函数。当您使用这个变量时,sql代码只会按原样复制。与其说它是一个变量,不如说它是一个宏。此外,hive有多个变量名称空间。最简单的两个选项是,在定义变量时不太详细,但在使用变量时更详细(hiveconf namespace):
set
${}
date_format()
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};
2条答案
按热度按时间tkclm6bt1#
第一个命令应以分号结尾:
变量的用法如下:
set命令不会计算表达式,它将按原样被替换。结果查询将是
如果您希望已经计算出变量,那么在shell中计算它并传递给您的配置单元脚本,如下所示:https://stackoverflow.com/a/37821218/2700344
rmbxnbpk2#
你仍然需要在结尾加一个分号
set
行,用${}
并使用适当的命名空间。请注意,这不会执行
date_format()
定义变量时的函数。当您使用这个变量时,sql代码只会按原样复制。与其说它是一个变量,不如说它是一个宏。此外,hive有多个变量名称空间。最简单的两个选项是,在定义变量时不太详细,但在使用变量时更详细(hiveconf namespace):
或者反过来(hivevar名称空间)