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 命令
当在没有 -e
或 -f
选项的情况下运行 ./bin/spark-sql
时,它会进入交互式 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