在閱讀Datastax docs爲Spark支持的SQL語法,我注意到你可以使用INSERT
之類的語句,你通常會做:星火SQL:INSERT INTO語句的語法
INSERT INTO hello (someId,name) VALUES (1,"hello")
測試了這一點,在Spark 2.0(Python的)環境和MySQL數據庫的連接,引發錯誤:
File "/home/yawn/spark-2.0.0-bin-hadoop2.7/python/lib/pyspark.zip/pyspark/sql/utils.py", line 73, in deco
pyspark.sql.utils.ParseException:
u'\nmismatched input \'someId\' expecting {\'(\', \'SELECT\', \'FROM\', \'VALUES\', \'TABLE\', \'INSERT\', \'MAP\', \'REDUCE\'}(line 1, pos 19)\n\n== SQL ==\nINSERT INTO hello (someId,name) VALUES (1,"hello")\n-------------------^^^\n'
但是,如果刪除了明確的列定義,它按預期工作:
INSERT INTO hello VALUES (1,"hello")
我錯過了什麼嗎?
據我所知,火花SQL是基於蜂巢SQL語法和[語言手冊DML(https://開頭cwiki .apache.org/confluence/display/Hive/LanguageManual + DML#LanguageManualDML-Synopsis.3)for hive says *「必須爲表中的每一列提供值。標準的SQL語法允許用戶只將值插入有些列還不被支持,爲了模仿標準SQL,可以爲用戶不希望分配值的列提供空值。「*因此,從spark sql的角度提供列是沒有意義的。 – VladoDemcak
@VladoDemcak好吧,從可讀性的角度來看,對我來說是否有意義,是否有必要爲每一列提供一個值。無論如何,這是否意味着Datastax文檔錯誤地放置了特定信息? – TMichel
可能Datastax文檔放錯位置 - [databricks文檔說只有這是可能的](https://docs.databricks.com/spark/latest/spark-sql/language-manual/insert.html#) – VladoDemcak