2016-10-23 5 views
1

スパークSQLのサポートされている構文についてDatastax docsを読みながら、私はあなたがあなたのようなINSERTステートメントを使用することができます気づい通常んでしょう:スパークSQL:INSERT INTOステートメントの構文

INSERT INTO hello (someId,name) VALUES (1,"hello") 

テストこのうちスパーク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") 

何か不足していますか?

+0

を次のようにあなたが行うことができます行を挿入したい場合は、スパークSQLはハイブSQL構文と、[言語のマニュアルDML]に基づいているので(https://でcwiki .apache.org/confluence/display/Hive/LanguageManual + DML#LanguageManualDML-Synopsis.3)for hiveは次のように述べています* "テーブルのすべての列に値を指定する必要があります。いくつかのカラムはまだサポートされていません。標準のSQLを模倣するために、ユーザが値を割り当てることを望まないカラムにはnullを指定することができます "*おそらく、spark SQLの観点からカラムを提供するのは意味がありません。 – VladoDemcak

+0

@VladoDemcakまあ、すべての列に値を提供する必要があるかどうかは、読みやすさの観点からはわかります。とにかく、これは、Datastaxのドキュメントがその特定の情報を間違って配置したことを意味しますか? – TMichel

+1

おそらくDatastaxのドキュメントが間違っていると思われます - [databricksのドキュメントにはこれが可能だとしか書いてありません](https://docs.databricks.com/spark/latest/spark-sql/language-manual/insert.html#) – VladoDemcak

答えて

0

スパークサポートハイブ構文あなたは私が知っているように

insert into hello select t.* from (select 1, 'hello') t; 
+0

ありがとうあなたの返事のために。単純なinsert文では冗長すぎるようですが、そうする方法は間違いありません。 – TMichel

+0

一部の列にデータを挿入する必要がある場合はどうしますか?たとえば、テーブルにcol0、col1、col2という3つのカラムがあり、int col0とcol2の値を挿入する必要があります。どうやってやるの? –

関連する問題