Spark обновляет несколько столбцов в дельте из другой таблицы - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь обновить несколько столбцов из одной дельта-таблицы на основе значений, полученных из другой дельта-таблицы. Обновление sql, приведенное ниже, работает в Oracle, но не в Spark Delta, не могли бы вы помочь?

deptDf = sqlContext.createDataFrame(
    [(10, "IT", "Seattle"), (20, "Accounting", "Renton"), (30, "Finance", "Bellevue"), (40, "Manufacturing", "Tacoma"), (50, "Inventory", "Bothell")],
    ("dno", "dname", "location"))

updateddeptlocDf = sqlContext.createDataFrame(
    [(20, "Accounting and Finance", "SODO"), (10, "Technology", "SODO")], ("dno", "updated_name", "updated_location"))

deptDf.write.format("delta").mode("Overwrite").save("/mnt/delta/dept")
updateddeptlocDf.write.mode("Overwrite").format("delta").save("/mnt/delta/updatedDept")
spark.sql("DROP TABLE IF EXISTS deptdelta")
spark.sql("DROP TABLE IF EXISTS updated_dept_location")
spark.sql("CREATE TABLE deptdelta USING DELTA LOCATION '/mnt/delta/dept'")
spark.sql("CREATE TABLE updated_dept_location USING DELTA LOCATION '/mnt/delta/updatedDept'")

И оператор обновления, который я пытаюсь выдать, но не работает:

ошибка:

Ошибка в SQL заявлении: ParseException: несоответствующий ввод ',' ожидание EQ (строка 2, позиция 11)

== SQL == UPDATE deptdelta d УСТАНОВИТЕ d.dname, d.location = (ВЫБЕРИТЕ ud.updated_name, ud.updated_location ИЗ updated_dept_location u ГДЕ d.dno = u.dno) ----------- ^^^ WHERE EXISTS (SELECT 'a 'from updated_dept_location u1 ГДЕ d.dno = u1.dno)

1 Ответ

0 голосов
/ 27 мая 2020

MERGE помогло

MERGE INTO deptdelta AS maindept
USING updated_dept_location AS upddept
ON upddept.dno = maindept.dno
WHEN MATCHED THEN UPDATE SET maindept.dname = upddept.updated_name, maindept.location = upddept.updated_location

...