При чтении Datastax docs для поддерживаемого синтаксиса искрового SQL, я заметил, что вы можете использовать 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")
Я что-то пропустил?
Как я знаю, искра SQL основан на улей SQL синтаксиса и [Language Manual DML] (https: // cwiki .apache.org/confluence/display/Hive/LanguageManual + DML # LanguageManualDML-Synopsis.3) для hive says * "Значения должны быть предоставлены для каждого столбца таблицы. Стандартный синтаксис SQL, который позволяет пользователю вставлять значения только в некоторые столбцы еще не поддерживаются. Чтобы имитировать стандартный SQL, для столбцов можно указать нули, которые пользователь не хочет присваивать значения. "*, поэтому, вероятно, не имеет смысла предоставлять столбцы с точки зрения искра sql. – VladoDemcak
@ VladoDemcak хорошо, это имеет смысл для меня с точки зрения читаемости, необходимо или нет, чтобы обеспечить значение для каждого столбца. В любом случае, означает ли это, что Datastax docs не учитывает эту конкретную информацию? – TMichel
Вероятно, Datastax docs неуместен - [Документация databricks говорит только об этом возможно] (https://docs.databricks.com/spark/latest/spark-sql/language-manual/insert.html#) – VladoDemcak