Spark SQL CLI
Spark SQL CLI は、Hive メタストアサービスを実行し、コマンドラインから入力された SQL クエリを実行するための便利な対話型コマンドツールです。Spark SQL CLI は Thrift JDBC サーバーと通信できないことに注意してください。
Spark SQL CLI を開始するには、Spark ディレクトリで以下を実行します。
./bin/spark-sql
Hive の設定は、conf/ ディレクトリに hive-site.xml、core-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.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 対話型シェルコマンド
-e または -f オプションなしで ./bin/spark-sql を実行すると、対話型シェルモードに入ります。コマンドを終了するには ; (セミコロン) を使用します。注意
- CLI は、行末にあり、かつ
\\;でエスケープされていない場合にのみ、コマンドを終了するために;を使用します。 ;はコマンドを終了する唯一の方法です。ユーザーがSELECT 1と入力して Enter キーを押すと、コンソールは入力待ちになります。- ユーザーが 1 行に複数のコマンドを入力した場合 (
SELECT 1; SELECT 2;のような)、コマンド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 コマンド> |
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