Hiveでのプレースホルダ置換
Hiveのテーブルで日付毎にパーティションを作るってよくやりますよね。
でもってこんな感じのクエリなげたりしますよね。
select count(distinct user_id) from daily_log where yyyymmdd='20131201'
で、もし1ヶ月分の日ごとのUUが欲しいとか言われたら
select count(distinct user_id) from daily_log where yyyymmdd='<<YYYYMMDD>>'
という感じのテンプレートuu.templateを用意して、
下記のようなシェルを実行しますよね。てか僕はしてました。要はsedで置換してファイルつくってそれを実行みたいな感じです。
seq -f 2013%g 1201 1231 | while read yyyymmdd do echo ${yyyymmdd} sed -e "s/<<YYYYMMDD>>/${yyyymmdd}/" uu.template > uu_${yyyymmdd}.hql hive -f uu_${yyyymmdd}.hql if [ $? -ne 0 ]; then echo "hive error" exit 1 fi done
でも、こんな感じのテンプレートを用意して
select count(distinct user_id) from daily_log where yyyymmdd='${yyyymmdd}'
下記のようにやる方法もあるんですね。これならsedで置換してファイル作る必要無いのでその分楽ですね。
seq -f 2013%g 1201 1231 | while read yyyymmdd do echo ${yyyymmdd} hive -d yyyymmdd=${yyyymmdd} -f uu.template if [ $? -ne 0 ]; then echo "hive error" exit 1 fi done
以上、小ネタでした。