Spark SQL CLI
Spark SQL CLI は、Hiveメタストアサービスを実行し、コマンドラインから入力されたSQLクエリを実行するための便利なインタラクティブなコマンドツールです。Spark SQL CLI は Thrift JDBC サーバーと通信できません。
Spark SQL CLI を起動するには、Spark ディレクトリで以下を実行します。
./bin/spark-sql
Hive の設定は、hive-site.xml
、core-site.xml
、hdfs-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.sql
は file:///path/to/spark-sql-cli.sql
と等価です。ユーザーは、s3://<mys3bucket>/path/to/spark-sql-cli.sql
や hdfs://<namenode>:<port>/path/to/spark-sql-cli.sql
のような Hadoop でサポートされているファイルシステムも使用できます。
サポートされるコメントの種類
コメント | 例 |
---|---|
単純なコメント |
-- これは単純なコメントです。
|
ブラケット付きコメント |
/* これはブラケット付きコメントです。 */
|
ネストされたブラケット付きコメント |
/* これは /* ネストされたブラケット付きコメント */ です。 */
|
Spark SQL CLI インタラクティブシェルコマンド
./bin/spark-sql
が -e
オプションまたは -f
オプションなしで実行されると、インタラクティブシェルモードに入ります。;
(セミコロン) を使用してコマンドを終了します。注意
- CLI は、行末にあり、
\\;
でエスケープされていない場合にのみ、コマンドを終了するために;
を使用します。 ;
はコマンドを終了する唯一の方法です。ユーザーがSELECT 1
を入力して Enter キーを押すと、コンソールは入力待ちになります。- ユーザーが
SELECT 1; SELECT 2;
のように複数のコマンドを1行に入力した場合、コマンドSELECT 1
とSELECT 2
は別々に実行されます。 ;
が 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 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