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 交互式 Shell 命令
当运行 ./bin/spark-sql
时,如果没有 -e
或 -f
选项,它将进入交互式 shell 模式。使用 ;
(分号)来终止命令。请注意
- CLI 仅在
;
位于行尾且未被\\;
转义时使用;
来终止命令。 ;
是终止命令的唯一方法。如果用户输入SELECT 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 将分别提交这两个命令并抛出解析器错误 (unclosed bracketed comment
和Syntax error at or near '*/'
)。
命令 | 描述 |
---|---|
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