Spark SQL CLI

Spark SQL CLI は、Hiveメタストアサービスを実行し、コマンドラインから入力されたSQLクエリを実行するための便利なインタラクティブなコマンドツールです。Spark SQL CLI は Thrift JDBC サーバーと通信できません。

Spark SQL CLI を起動するには、Spark ディレクトリで以下を実行します。

./bin/spark-sql

Hive の設定は、hive-site.xmlcore-site.xmlhdfs-site.xml ファイルを conf/ に配置して行います。

Spark SQL コマンドラインオプション

利用可能なすべてのオプションの完全なリストについては、./bin/spark-sql --help を実行してください。

CLI options:
 -d,--define <key=value>          Variable substitution to apply to Hive
                                  commands. e.g. -d A=B or --define A=B
    --database <databasename>     Specify the database to use
 -e <quoted-query-string>         SQL from command line
 -f <filename>                    SQL from files
 -H,--help                        Print help information
    --hiveconf <property=value>   Use value for given property
    --hivevar <key=value>         Variable substitution to apply to Hive
                                  commands. e.g. --hivevar A=B
 -i <filename>                    Initialization SQL file
 -S,--silent                      Silent mode in interactive shell
 -v,--verbose                     Verbose mode (echo executed SQL to the
                                  console)

hiverc ファイル

-i オプションなしで呼び出された場合、Spark SQL CLI は初期化ファイルとして $HIVE_HOME/bin/.hiverc$HOME/.hiverc の読み込みを試みます。

パス解釈

Spark SQL CLI は、初期化スクリプトファイル (-i) または通常の SQL ファイル (-f) からの SQL の実行をサポートします。パス URL にスキームコンポーネントがない場合、パスはローカルファイルとして扱われます。たとえば、/path/to/spark-sql-cli.sqlfile:///path/to/spark-sql-cli.sql と等価です。ユーザーは、s3://<mys3bucket>/path/to/spark-sql-cli.sqlhdfs://<namenode>:<port>/path/to/spark-sql-cli.sql のような Hadoop でサポートされているファイルシステムも使用できます。

サポートされるコメントの種類

コメント
単純なコメント -- これは単純なコメントです。
SELECT 1;
ブラケット付きコメント /* これはブラケット付きコメントです。 */
SELECT 1;
ネストされたブラケット付きコメント /* これは /* ネストされたブラケット付きコメント */ です。 */
SELECT 1;

Spark SQL CLI インタラクティブシェルコマンド

./bin/spark-sql-e オプションまたは -f オプションなしで実行されると、インタラクティブシェルモードに入ります。; (セミコロン) を使用してコマンドを終了します。注意

  1. CLI は、行末にあり、\\; でエスケープされていない場合にのみ、コマンドを終了するために ; を使用します。
  2. ; はコマンドを終了する唯一の方法です。ユーザーが SELECT 1 を入力して Enter キーを押すと、コンソールは入力待ちになります。
  3. ユーザーが SELECT 1; SELECT 2; のように複数のコマンドを1行に入力した場合、コマンド SELECT 1SELECT 2 は別々に実行されます。
  4. ; が SQL ステートメント内(行末ではない)に表示される場合、特別な意味はありません。
    -- This is a ; comment
    SELECT ';' as a;
    

    これは、文字列リテラルを返す SQL クエリに続くコメント行です。

    /* This is a comment contains ;
    */ SELECT 1;
    

    しかし、「;」が行末にある場合、SQLステートメントは終了します。上記の例は /* This is a comment contains */ SELECT 1 に分割され、Spark はこれら2つのコマンドを別々に送信し、パーサーエラー(unclosed bracketed commentSyntax error at or near '*/')をスローします。

コマンド説明
quit または exit インタラクティブシェルを終了します。
!<command> Spark SQL CLI シェルからシェルコマンドを実行します。
dfs <HDFS dfs command> Spark SQL CLI シェルから HDFS dfs コマンド を実行します。
<クエリ文字列> Spark SQL クエリを実行し、結果を標準出力に出力します。
source <filepath> CLI 内でスクリプトファイルを実行します。

コマンドラインからクエリを実行する例

./bin/spark-sql -e 'SELECT COL FROM TBL'

Hive 設定変数を設定する例

./bin/spark-sql -e 'SELECT COL FROM TBL' --hiveconf hive.exec.scratchdir=/home/my/hive_scratch

Hive 設定変数を設定し、SQL クエリで使用する方法の例

./bin/spark-sql -e 'SELECT ${hiveconf:aaa}' --hiveconf aaa=bbb --hiveconf hive.exec.scratchdir=/home/my/hive_scratch
spark-sql> SELECT ${aaa};
bbb

Hive 変数の置換を設定する例

./bin/spark-sql --hivevar aaa=bbb --define ccc=ddd
spark-sql> SELECT ${aaa}, ${ccc};
bbb ddd

サイレントモードを使用してクエリからのデータをファイルにダンプする例

./bin/spark-sql -S -e 'SELECT COL FROM TBL' > result.txt

非インタラクティブにスクリプトを実行する例

./bin/spark-sql -f /path/to/spark-sql-script.sql

インタラクティブモードに入る前に初期化スクリプトを実行する例

./bin/spark-sql -i /path/to/spark-sql-init.sql

インタラクティブモードに入る例

./bin/spark-sql
spark-sql> SELECT 1;
1
spark-sql> -- This is a simple comment.
spark-sql> SELECT 1;
1

コメント内にエスケープされた ; を使用してインタラクティブモードに入る例

./bin/spark-sql
spark-sql>/* This is a comment contains \\;
         > It won't be terminated by \\; */
         > SELECT 1;
1