虽然documentation指定了人们如何替换变量,但它并不会接近支持列表。
我有一个需要在一个月中的每一天运行的查询,所以我想做这样的事情:
for day in days:
ALTER TABLE foo ADD PARTITION(${day=hiveconf:day});
有没有方法可以做到这一点!使用某种脚本语言,如python / bash。
我有一个python实现,但它需要为每个查询启动一个新的hive进程。除了丑陋之外,由于蜂巢启动时间的原因,这对小型查询的性能很差。
答案 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'"