我可以在配置单元中使用变量替换值列表吗?

时间:2013-01-07 11:03:51

标签: variables hadoop hive

虽然documentation指定了人们如何替换变量,但它并不会接近支持列表。

我有一个需要在一个月中的每一天运行的查询,所以我想做这样的事情:

for day in days:
  ALTER TABLE foo ADD PARTITION(${day=hiveconf:day});

有没有方法可以做到这一点!使用某种脚本语言,如python / bash。

我有一个python实现,但它需要为每个查询启动一个新的hive进程。除了丑陋之外,由于蜂巢启动时间的原因,这对小型查询的性能很差。

2 个答案:

答案 0 :(得分:1)

这并不是一个很好的方法,我很确定没有辅助脚本语言就没有办法做到这一点。但是像bash这样的东西并不太痛苦:

hive_script=foo.hql
if [ -e "$hive_script" ]
then
    rm $hive_script
fi
days="1 2 3 4 5"
for day in $days
do
    echo "ALTER TABLE foo ADD PARTITION(day=$day);" >> $hive_script
done
hive -f $hive_script
rm $hive_script

可以在python中使用相同的策略:让脚本生成您要执行的所有命令,并将它们写入同一文件。然后只需执行该文件。

答案 1 :(得分:0)

您可以使用

--hivevar VALUES=1,2,3,4

它对查询中的值进行愚蠢的替换。因此,如果您在查询中输入

...WHERE values in (${VALUES})

它将翻译为

...WHERE values in (1,2,3,4)

此外,如果您的值是字符串,则需要用双引号将整个列表括起来,例如: --hivevar VALUES="'1','2','3'"