Spark SQL支持的功能测试

SparkSQL功能的总结,本测试是基于Spark 1.6.1版本进行的。Spark Sql使用的是catalyst(开源项目)作为sql 解析器。源码类为:org.apache.spark.sql.catalyst.SQLParser。 看看它的注释:

* A very simple SQL parser. Based loosely on:

* https://github.com/stephentu/scala-sql-parser/blob/master/src/main/scala/parser.scala

* Limitations:

* - Only supports a very limited subset of SQL.

* This is currently included mostly for illustrative purposes. Users wanting more complete support

* for a SQL like language should checkout the HiveQL support in the sql/hive sub-project.

即:功能有限,怎样让SparkSql支持HQL的所有功能呢,在第二部分说明。

一.Spark Sql 功能测试:

1、查询结果默认与原数据中的顺序一致。

2、distinct 去重:大小写敏感,可作用于其后多个字段

3、limit 限制返回结果条数:前n条

4、排序 order by:作用于其后多列(可分别指定排序方式);排序字段可为非选择列;默认正序;不支持列位置排序(如:order by 1 不支持).

5、支持的where子句操作符:=,<>,!=,,>=,between and,is null,is not null

6、组合where子句:and、or、in、not in、case when;and 优先级高于 or。

7、模糊查找like通配符:%,- ,通配符对数据类型也起作用

8、支持表和字段别名

9、不支持字段拼接;但可使用DataFrame.withColumn方法实现。

10、支持算术计算:+,-,*,/,%

11、字符串函数:lower、upper,没去空格函数

12、数值函数 :abs、sqrt,没三角函数

13、聚合函数:avg、count、sum、max、min,avg忽略为空的行,作用于字符串返回null;count 不忽略空行;max、min也可以作用于字符串列,分别返回第一行最后一行;avg,max,min 不支持去重后求值

14、支持分组 group by及分组过滤having

15、支持表内联结、左外联结、右外联结、全联结

16、组合union:union结果去重,union all不去重(功能同unionAll函数) ;intersect 交集;except 差集。

17、不支持子查询(2.0版本支持:https://issues.apache.org/jira/browse/SPARK-4226)

二.使用HiveContext支持HQL

val sqlContext = new HiveContext(sc)
sqlContext.read.parquet(input).registerTempTable("device_table")

此时表device_table即可支持hive 的sql功能。


分享到:


相關文章: