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功能。


分享到:


相關文章: