0

ドキュメントは変数を置き換える方法を指定していますが、リストをサポートするために継ぎ目がありません。

月の各日に実行する必要があるクエリがあるので、次のようなことをしたいと思います。

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

なしでこれを行う方法はありますか?python/bashのようなある種のスクリプト言語を使用します。

Pythonを実装していますが、クエリごとに新しいハイブプロセスを開始する必要があります。醜いだけでなく、ハイブの起動時間が原因で、小さなクエリのパフォーマンスが低下します。

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 に答える