0

虽然文档指定了如何替换变量,但它并不支持列表。

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

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

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

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

4

2 回答 2

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 中可以使用相同的策略:让脚本生成您要执行的所有命令,并将它们写入同一个文件。然后只需执行该文件。

于 2013-01-09T22:08:14.547 回答
0

您可以使用

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

它对查询中的值进行了愚蠢的替换。所以,如果在你的查询中你写

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

它会转化为

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

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

于 2019-06-18T21:12:04.827 回答