Spark SQL CLI

Spark SQL CLI は、Hive メタストアサービスを実行し、コマンドラインから入力された SQL クエリを実行するための便利な対話型コマンドツールです。Spark SQL CLI は Thrift JDBC サーバーと通信できないことに注意してください。

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

./bin/spark-sql

Hive の設定は、conf/ ディレクトリに hive-site.xmlcore-site.xml、および hdfs-site.xml ファイルを配置することで行われます。

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)

hive.site.xml ファイル

-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 対話型シェルコマンド

-e または -f オプションなしで ./bin/spark-sql を実行すると、対話型シェルモードに入ります。コマンドを終了するには ; (セミコロン) を使用します。注意

  1. CLI は、行末にあり、かつ \\; でエスケープされていない場合にのみ、コマンドを終了するために ; を使用します。
  2. ; はコマンドを終了する唯一の方法です。ユーザーが SELECT 1 と入力して Enter キーを押すと、コンソールは入力待ちになります。
  3. ユーザーが 1 行に複数のコマンドを入力した場合 (SELECT 1; SELECT 2; のような)、コマンド 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 comment および Syntax error at or near '*/') を発生させます。

コマンド説明
quit または exit 対話型シェルを終了します。
!<command> Spark SQL CLI シェルからシェルコマンドを実行します。
dfs <HDFS dfs コマンド> Spark SQL CLI シェルから HDFS dfs コマンドを実行します。
<query string> 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