【Hive】Hive / HiveQL ~ コメント文 ~

■ はじめに

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>'

原因

* 複数行コメント文(/* */)は未サポート?

https://stackoverflow.com/questions/10235002/is-there-a-way-to-make-a-multi-line-comment-in-hive-scripts

より抜粋

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