在Hive中声明变量时如何调用查询?

问题描述

如何在Hive中声明变量时查询变量?我正在创建一个外壳脚本以删除先前日期的分区,因此在file.hql中,我使用的是:

Alter table table_name drop partition column >= ‘datesub(current_date-1)’;

但是它不起作用,因此我尝试在变量中声明条件,然后在此处调用。因此,我首先尝试声明变量,然后在查询调用它:

set var1= Select date_sub(current_date,1)

Alter table table_name drop partition column >= ‘${hoveconf:var1}’;

但是这不起作用,因为未正确声明变量。那么如何在变量下声明查询呢?

解决方法

Hive不会在替换之前计算变量,而是按原样替换变量。分区规范中也不允许使用函数和子查询。

解决方案是在shell中计算变量并将其传递给脚本:

bash$ dt=$(date -d '-1 day' +%Y-%m-%d)
bash$ hive -e "ALTER TABLE table_name drop partition (column >='$dt')"

或者,如果您希望调用脚本文件,则传递hiveconf变量:

  bash$ dt=$(date -d '-1 day' +%Y-%m-%d)
  bash$ hive -hiveconf dt="$dt" -f script_name

#在脚本中使用'${hiveconf:dt}'

ALTER TABLE table_name drop partition (column >='${hiveconf:dt}')