任何结构性的资料(ex:Json)在Spark SQL下,都可以透过createOrReplaceTempView("view名称")
告知Spark SQL
你将资料注册成一个view,之后就可以用熟悉的SQL语法来检索资料!
scala> val task = spark.read.json("file:///data_toysrus.json")scala> task.craeteOrReplaceTempView("toysrus")
但是光资料库就各有各的山头,SQL语法当然也是!
今天就拿W3School贴的语法来实测看看Spark SQL的支援程度!
第一个登场的是 MySQL
:
scala> val mysql = spark.sql("SELECT * FROM toysrus LIMIT 3")scala> mysql.show+----------+------------+----------+-------+-------------+---------+--------+|customerId|customerName| date4T| price|productAmount|productId| time4T|| 51| aclindsa|2018-05-11|9506.21| 1| 68| 6:55 AM|| 99|adamschwartz|2018-05-11|4107.59| 5| 86| 7:39 PM|| 79| ben|2018-05-11|2987.22| 7| 58|11:57 AM|+----------+------------+----------+-------+-------------+---------+--------+
看起来mysql
是被Spark SQL认可接受的!
第二个登场的是 MSSQL
:
scala> val mssql = spark.sql("SELECT TOP 3 * FROM toysrus")scala> mssql.showorg.apache.spark.sql.catalyst.parser.ParseException:... ...== SQL ==SELECT TOP 3 * FROM toysrus-----------^^^
TOP语法挂了,立马喷错!mssql
挑战失败!
第三个登场的是 Oracle
:
scala> val oracle = spark.sql("SELECT * FROM toysrus WHERE ROWNUM <= 3")scala> oracle.showorg.apache.spark.sql.AnalysisException: cannot resolve 'ROWNUM' given input columns: [... ...... ...
ROWNUM被判定为栏位,但实际Json资料本来就没ROWNUM这个属性!oracle
挑战失败!