本文主要介绍如何操作工具Spark-SQL以及相关示例。

前提条件

本工具的安装、配置说明请参考Spark-Submit命令行工具

提交离线SQL作业

spark-sql工具,提供 -e用于执行以分号隔开的多条sql语句,以及-f用于执行sql文件中的语句(每条sql语句以分号结尾)。用户可将conf字段指定的配置放入conf/spark-defaults.conf 中,然后按照如下格式提交:
## 使用-e命令执行多条语句,每条sql语句使用`;`号隔开。--database用于指定默认的database

$ ./bin/spark-sql \
--verbose \
--database mydb \
--name offlinesql \
-e "select * from t1;insert into table t1 values(4,'test');select * from t1" 


## 或者您也可以将sql语句放入到文件中,每条sql语句使用分号`;`隔开,并使用-f参数指向sql文件,仅支持本地文件,
且必须写绝对路径

$ ./bin/spark-sql \
--verbose \
--name offlinesql \
-f /path/to/your/sql/file


##输出结果如下所示
++++++++++++++++++executing sql: select * from t1
| id|name|
|  1|  zz|
|  2|  xx|
|  3|  yy|
|  4|test|
++++++++++++++++++ end ++++++++++++++++++
++++++++++++++++++executing sql: insert into table t1 values(4,'test')
||
++++++++++++++++++ end ++++++++++++++++++
++++++++++++++++++executing sql: select * from t1
| id|name|
|  1|  zz|
|  2|  xx|
|  3|  yy|
|  4|test|


## spark-sql 也支持使用变量替换,您可以使用-d key=value来指定参数的值,随后可以在sql语句中使用${key}来引用key的值。
$ ./bin/spark-sql \
--verbose \
--name variableSubstitution \
-d table=mytable \
-e "use <db>; select * from \${table}"

## 在终端 `$` 符号有特殊含义,所以需要在引用变量`table`时转义$符号,如果是在sql文件中引用变量则无需转义
##替换的sql语句如下
use <db>; select * from mytable