■ はじめに
Hiveで実行した際に、コメント文でエラーになった。 詳細は、以下の「【3】補足:コメント文に関するトラブルについて」で扱うが その際に色々と調べたので、記録しておく。
目次
【1】Hive のコメント文 【2】使用上の注意 1)コメント「/* */」について 【3】補足:コメント文に関するトラブルについて
【1】Hive のコメント文
* HiveQL の コメント文は、以下の2通りで記述できる。 1)「--」 2)「/* */」(※「【2】使用上の注意」を参照)
サンプル
-- Comment-1 SELECT * FROM table1; SELECT /* Comment-2 */ * FROM table2 ;
【2】使用上の注意
* 基本、『1)「--」』を使っておいた方が無難 => 将来的には、複数行コメント文をサポートされるとは思うが、、、 => 最新のHiveなら対応されている?
https://github.com/apache/hive/blob/master/hplsql/src/main/antlr4/org/apache/hive/hplsql/Hplsql.g4
1)コメント「/* */」について
* v2.3.0 以降でサポート => ただ、複数行ではうまく機能しないっぽい (詳細は、「【3】補足:コメント文に関するトラブルについて」を参照)
https://issues.apache.org/jira/browse/HIVE-15765
-- より抜粋 select /*+ MAPJOIN(a) */ /* mapjoin hint */ a /* column */ from foo join bar;
【3】補足:コメント文に関するトラブルについて
現象:複数行コメント文が機能しない
* 複数行コメント文(/* */)内のHQL文が実行されてしまう
問題が発生したHQLファイル例:sample.hql
use sample_db; -- NG /* SELECT * FROM table3; */
実行コマンド
hive -v -f sample.hql
発生環境
* EMR-5.29.0 - Spark2.4.4 - Hive 2.3.6
エラー内容
/* SELECT * FROM table3 NoViableAltException(-1@[]) at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1300) ... at org.apache.hadoop.util.RunJar.main(RunJar.java:153) FAILED: ParseException line X:XX cannot recognize input near '<EOF>' '<EOF>' '<EOF>'
原因
* 複数行コメント文(/* */)は未サポート?
より抜粋 Multi-line (aka "bracketed") comments should be available in Hive v2.3.0: https://issues.apache.org/jira/browse/HIVE-15765 >> However, in my experience it is not working in CREATE TABLE (DDL) statements yet on v2.3.0.
解決案
* 「--」で書き直す
修正後
-- SELECT * FROM table3;
参考文献
https://wyukawa.hatenablog.com/entry/20110804/1312451856
関連記事
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/06/02/183823