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:// /path/to/spark-sql-cli.sql hdfs:// : /path/to/spark-sql-cli.sql

支持的评论类型

评论 示例
简单评论 -- 这是一个简单的评论。
SELECT 1;
括号评论 /* 这是一个括号评论。 */
SELECT 1;
嵌套括号评论 /* 这是一个 /* 嵌套的括号评论*/ 。*/
SELECT 1;

Spark SQL CLI交互式 shell命令

./bin/spark-sql 在没有使用 -e -f 选项时,它会进入交互式命令行模式。使用 ; (分号)来结束命令。注意:

  1. CLI只能在行末使用 ; 来终止命令,并且不能通过 \\; 转义。
  2. ; 是终止命令的唯一方式。如果用户输入 SELECT 1 并按下回车,控制台将只会等待输入。
  3. 如果用户在一行中输入多个命令,如 SELECT 1; SELECT 2; ,那么命令 SELECT 1 SELECT 2 将会分别执行。
  4. 如果 ; 出现在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