■ はじめに
hive の変数 hiveconf について扱ったのでまとめておく。
目次
【0】公式ドキュメント 【1】Hiveの変数の種類 1)hivevar 2)hiveconf 3)env 4)system 【2】指定の仕方 1)コマンドラインからの指定 2)ファイル内での指定 【3】デバッグ出力について 【4】変数置換機能ON/OFF - hive.variable.substitute 【5】「コマンドラインからの指定」する場合の注意点 1)値に空白がある場合 2)複数指定したい場合
【0】公式ドキュメント
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+VariableSubstitution
【1】Hiveの変数の種類
以下の4通り。 1)hivevar 2)hiveconf 3)env 4)system
1)hivevar
* namespaceが不要で${変数}のみで変数展開できる
サンプル
set hivevar:target_date=2020-03-01; SELECT * FROM person_table WHERE birth_date="${hivevar:target_date}" -- hivevar:なくても大丈夫 SELECT * FROM person_table WHERE birth_date="${target_date}"
2)hiveconf
* 指定する場合、『${hiveconf:【変数名】}』とする。
サンプル
set hiveconf:target_date=2020-03-01; -- ${hiveconf:target_date} で指定 SELECT * FROM person_table WHERE birth_date="${hiveconf:target_date}"
3)env
* 環境変数 * Hive実行前に設定しておく必要がある
サンプル
SELECT * FROM person WHERE name="${env:var_name}"
4)system
* jvm(Java Virtual Machine)
サンプル
hive> select '${system:user.name}'; OK hadoop_user
【2】指定の仕方
* 変数の設定の仕方は、以下の2通りある。 1)コマンドラインからの指定 2)ファイル内での指定
1)コマンドラインからの指定
構文
# -f <filename> : ファイルからのSQL実行 # -v : 詳細モード(実行したSQLをコンソール上に表示) hive --hivevar 【変数】=【値】 -v -f 【ファイル名】
2)ファイル内での指定
構文
set hivevar:【変数】=【値】;
【3】デバッグ出力について
https://dk521123.hatenablog.com/entry/2020/07/29/141607
より抜粋 ~~~~~~ !echo "hello world. ${value1}"; ~~~~~~
【4】変数置換機能ON/OFF - hive.variable.substitute
より、変数により置換機能をOffにしたい場合、 「hive.variable.substitute=false」にすればいいらしい。 (あんまり必要なさそうだけど)
サンプル
# デフォルトは true set hive.variable.substitute=false;
【5】「コマンドラインからの指定」する場合の注意点
1)値に空白がある場合
# 囲み文字が指定できないので、空白はどうするんだってなると思うが... * 「バックスラッシュでエスケープする」又は「囲み文字(" or ')で囲う」
サンプル
# ${hiveconf:target_datetime}=2021/06/24\ 10:10:10 hive -v -f sample.hql --hiveconf target_datetime=2021/06/24\ 10:10:10 hive -v -f sample.hql --hiveconf target_datetime="2021/06/24 10:10:10"
2)複数指定したい場合
* 1変数につき、「--hiveconf」(or 「--hivevar」)を指定する。
サンプル
hive -v -f sample.hql --hiveconf value1=hello --hiveconf value2=world
sample.hql(上記サンプルで実験用に使用)
!echo "target_datetime : ${hiveconf:target_datetime}"; !echo "value1 : ${hiveconf:value1}"; !echo "value2 : ${hiveconf:value2}";
参考文献
http://nosource.blog35.fc2.com/blog-entry-168.html
https://qiita.com/wwacky/items/358fb9145db3143220f6
https://gist.github.com/ksomemo/bad7a25bdd428f86ef1b
関連記事
Hive / HiveQL ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2019/11/25/235219
Hive / HiveQL ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/25/231235
Hive / HiveQL ~ デバッグ編 ~
https://dk521123.hatenablog.com/entry/2020/07/29/141607