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
。使用者也可以使用 Hadoop 支援的檔案系統,例如 s3://<mys3bucket>/path/to/spark-sql-cli.sql
或 hdfs://<namenode>:<port>/path/to/spark-sql-cli.sql
。
支援的註解類型
註解 | 範例 |
---|---|
簡單註解 |
-- 這是簡單註解。
|
括號註解 |
/* 這是括號註解。 */
|
巢狀括號註解 |
/* 這是 /* 巢狀括號註解 */ 。*/
|
Spark SQL CLI 互動式殼層命令
當 ./bin/spark-sql
在沒有 -e
或 -f
選項的情況下執行時,它會進入互動式殼層模式。使用 ;
(分號)終止命令。請注意
- CLI 僅在分號
;
出現在行尾時才會用來終止命令,且不會被\\;
逸出。 ;
是終止命令的唯一方法。如果使用者輸入SELECT 1
並按下 Enter,主控台只會等待輸入。- 如果使用者在同一行輸入多個命令,例如
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 陳述式。上述範例會終止為
/* 這是包含
和*/ SELECT 1
,Spark 會提交這兩個分開的命令,並擲出剖析器錯誤(未關閉的括號註解
和語法錯誤在或接近 '*/'
)。
命令 | 說明 |
---|---|
quit 或 exit |
退出互動式 shell。 |
!<command> |
從 Spark SQL CLI shell 執行 shell 命令。 |
dfs <HDFS dfs command> |
從 Spark SQL CLI shell 執行 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