HiveQL の標準的な拡張子ってなんだろう?

Written by @ryysud

Dec 24, 2017 23:48 · 883 words · 2 minutes read #Hive

まえおき

Hive とか HiveQL ってなにとかは今回は割愛します。

自分が今まで見てきたファイルだと .hql とか .sql など使われていて、実際どんな拡張子だろうが関係ない(違かったらごめんなさい)気もするけど、Apache Hive としての標準はなんなんだろうと気になって調べたみたというやつです。

適当にぐぐる 🔍

どうやら Apache Hive Project では .q を拡張子として使ってるみたい。

The standard at Apache Hive project is to use .q

https://stackoverflow.com/questions/15835937/standard-file-extension-for-hive-ddl-script

と思ったら LanguageManual Cli - Apache Hive の Hive CLI のサンプルでは .sql になってる。

$HIVE_HOME/bin/hive -f /home/my/hive-script.sql
$HIVE_HOME/bin/hive -f hdfs://<namenode>:<port>/hive-script.sql
$HIVE_HOME/bin/hive -f s3://mys3bucket/s3-script.sql

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Cli#LanguageManualCli-HiveCommandLineOptions

混乱してきたので Apache Hive のリポジトリを覗いてみる 👀

GitHub で公開されている Mirror of Apache Hive を見てみると .q.sql が共存している感じだけど、コミットログ的には .sql のが新しいことがわかる。

新しい方が正でしょ!と思ったら hplsql ってなんだそれってなったので更に調べてみる。

Hive HPL/SQL is なに?

どうやら hplsql は Hive 2.0.0 からサポートされた Hive HPL/SQL の略のようで、Hive HPL/SQL の実体は Hive の他にも SparkSQL や Impala などでも使える汎用的なクエリのようでした。

Hive Hybrid Procedural SQL On Hadoop (HPL/SQL) is a tool that implements procedural SQL for Hive. It is available in Hive 2.0.0 (HIVE-11055).

HPL/SQL is an open source tool (Apache License 2.0) that implements procedural SQL language for Apache Hive, SparkSQL, Impala as well as any other SQL-on-Hadoop implementation, any NoSQL and any RDBMS.

https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=59690156

とりあえずこの Hive HPL/SQL で使っている拡張子が .sql ということはわかりました。hplsql.org をさらっと見てみたら、なんか色々出来そうなことはわかったので、Hive 2.0.0 を本番運用する際にはチェックしてみようと思いました。(触ってみたときにはまた記事にまとめます)

まとめ

Hive HPL/SQL では .sql が使われていて、HiveQL は現在 SQL を完全にはサポートしていないけど、将来的には完全にサポートしていきますよの意思表示で Hive CLI のサンプルなどで .sql を使っているのかなと勝手な解釈をしました。

HiveQL の SQL準拠 への取り組みに関しては、Hadoop Summit 2016 Tokyo の Major advancements in Apache Hive towards full support of SQL compliance というセッションが大変わかりやすいです。こちらのスライドの概要は Hadoop Summit のブログ を見てみるといいかも。

まあ以前使われていた .q でも、サンプル通りの .sql でも、どちらでも好きな方を使えばいいかなって感じで腑に落ちたので、今回の記事を書いた甲斐がありました。

今後も Hive と仲良くやっていきたいと思います〜〜〜