虽然文档指定了如何替换变量,但它并不支持列表。
我有一个查询需要在一个月的每一天运行,所以我想做这样的事情:
for day in days:
ALTER TABLE foo ADD PARTITION(${day=hiveconf:day});
有没有办法做到这一点!使用某种脚本语言,如 python/bash。
我有一个 python 实现,但它需要为每个查询启动一个新的配置单元进程。除了丑陋之外,由于 hive 启动时间,这对于小型查询的性能很差。
没有真正的好方法可以做到这一点,而且我很确定如果没有辅助脚本语言,根本就没有办法做到这一点。但在 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 中可以使用相同的策略:让脚本生成您要执行的所有命令,并将它们写入同一个文件。然后只需执行该文件。
您可以使用
--hivevar VALUES=1,2,3,4
它对查询中的值进行了愚蠢的替换。所以,如果在你的查询中你写
...WHERE values in (${VALUES})
它会转化为
...WHERE values in (1,2,3,4)
此外,如果您的值是字符串,则需要用双引号将整个列表括起来,例如:
--hivevar VALUES="'1','2','3'"