Spark SQL 命令行界面
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 选项:
-d,--define 要应用于 Hive 命令的变量替代。 例如 -d A=B 或 --define A=B
--database 指定要使用的数据库
-e 命令行中的 SQL
-f 文件中的 SQL
-H,--help 打印帮助信息
--hiveconf 使用给定属性的值
--hivevar 要应用于 Hive 命令的变量替代。 例如 --hivevar A=B
-i 初始化 SQL 文件
-S,--silent 交互式 Shell 的静默模式
-v,--verbose 详细模式(将执行的 SQL 回显到控制台)
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://
或
hdfs://
。
支持的评论类型
评论 | 示例 |
---|---|
简单评论 |
-- 这是一个简单的评论。
|
括号评论 |
/* 这是一个括号评论。 */
|
嵌套括号评论 |
/* 这是一个 /* 嵌套的括号评论*/ 。*/
|
Spark SQL CLI交互式 shell命令
当
./bin/spark-sql
在没有使用
-e
或
-f
选项时,它会进入交互式命令行模式。使用
;
(分号)来结束命令。注意:
-
CLI只能在行末使用
;
来终止命令,并且不能通过\\;
转义。 -
;
是终止命令的唯一方式。如果用户输入SELECT 1
并按下回车,控制台将只会等待输入。 -
如果用户在一行中输入多个命令,如
SELECT 1; SELECT 2;
,那么命令SELECT 1
和SELECT 2
将会分别执行。 -
如果
;
出现在SQL语句中(而不是行末),那么它没有特殊含义:-- 这是一条 ; 注释 SELECT ';' as a;
这只是一个注释行,后面跟着一个返回字符串字面量的SQL查询。
/* 这是一个包含 ; 的注释 */ SELECT 1;
然而,如果‘;’是行末,它将终止SQL语句。上面的例子将被终止为
/* 这是一个包含
和*/ SELECT 1
,Spark将会提交这两个分开的命令并抛出解析器错误(未闭合的括号注释
和语法错误在或接近 '*/'
)。
命令 | 描述 |
---|---|
quit
或
exit
|
退出交互式 shell。 |
!
|
从 Spark SQL CLI shell 执行一个 shell 命令。 |
dfs
|
从 Spark SQL CLI shell 执行一个 HDFS dfs 命令 。 |
|
执行一个 Spark SQL 查询并将结果打印到标准输出。 |
source
|
在 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> 选择 1;
1
spark-sql> -- 这是一个简单的注释。
spark-sql> 选择 1;
1
在注释中使用转义
;
进入交互模式的示例:
./bin/spark-sql
spark-sql>/* 这是一个包含 \\; 的注释
> 它不会被 \\; 终止 */
> SELECT 1;
1