Spark SQL:INSERT INTO语句语法

TMi*_*hel 6 apache-spark apache-spark-sql

在阅读Datastax文档以获取支持的Spark SQL语法时,我注意到您可以INSERT像通常那样使用语句:

INSERT INTO hello (someId,name) VALUES (1,"hello")
Run Code Online (Sandbox Code Playgroud)

在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'
Run Code Online (Sandbox Code Playgroud)

但是,如果我删除显式列定义,它将按预期工作:

INSERT INTO hello VALUES (1,"hello")
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

San*_*hit 2

Spark 支持 hive 语法,因此如果您想插入行,可以执行以下操作

insert into hello select t.* from (select 1, 'hello') t;
Run Code Online (Sandbox Code Playgroud)