Как обновить дельта-таблицу Databricks с помощью внутреннего соединения в Databricks с помощью Spark sql

Мне нужно обновить столбец таблицы с внутренним соединением с другой таблицей. Я пробовал использовать приведенный ниже sql. Но я получаю ошибку в Databricks как (Ошибка в операторе SQL: ParseException: несоответствующий ввод '' ожидая 'КОГДА'). пробовали разные способы обновления таблицы.Может ли кто-нибудь помочь мне в этом вопросе, как это исправить?

%sql
merge into test a using test_1 b
on (a.id_num=b.id_num)
when matched then
update set a.name=b.name;

person pythonUser    schedule 14.02.2019    source источник
comment
Что вы пытаетесь обновить? Таблица ORC?   -  person thebluephantom    schedule 14.02.2019
comment
Нет, это обычная таблица. Я хочу обновить некоторые столбцы тестовой таблицы, которые эти столбцы также будут представлены в test_1. В приведенном выше коде я хочу обновить столбец имени тестовой таблицы. Я также пробовал ниже запрос. обновить test t1 set name = (выбрать t2.name из test_1 t2, где t1.id_num = t2.id_num), где существует (выбрать 1 из test_1, где t1.id_num = t2.id_num). Это также дало мне некоторую ошибку.   -  person pythonUser    schedule 14.02.2019
comment
Есть ли другой способ обновления помимо использования запроса слияния, например, «Обновить таблицу1, присоединиться к таблице2» на Table1.ID = Table2.ID?   -  person Nikhil Redij    schedule 05.11.2019


Ответы (4)


Ваша таблица должна быть в формате ДЕЛЬТА. это?

Я думаю, твоя команда в порядке.

https://docs.databricks.com/spark/latest/spark-sql/language-manual/merge-into.html

person Fabio Schultz    schedule 14.02.2019

Если я правильно понимаю ваш вопрос, вы хотите использовать слияние блоков данных в конструкцию, чтобы обновить столбцы таблицы 1 (скажем, назначения), присоединив их к другой таблице 2 (источник)

ОБЪЕДИНЯЙТЕСЬ В пункт назначения ИСПОЛЬЗУЯ обновления в пункте назначения.primary_key = source.foregin_key КОГДА СООТВЕТСТВУЕТ ЗАТЕМ ОБНОВЛЕНИЕ УСТАНОВИТЬ column1 = updates.column1

Тот же запрос может быть расширен для вставки данных, если в исходной и целевой таблице нет маршевой строки.

  • Примечание. Мой ответ основан на предположении, которое я сделал в начале. Если вы сможете продолжить, это поможет лучше понять вашу проблему.
person sandesh dahake    schedule 14.02.2019

Это связано с версией среды выполнения Databricks, вам необходимо использовать Databricks Runtime version 5.1 или выше для вашего запроса в таблице дельта. Но для операции слияния вам сначала нужна таблица Delta.

person Vijay Kumar Sharma    schedule 16.02.2019

запрос, который вы используете, правильный. Причина сбоя в том, что вы не используете дельта-таблицы, в вашем случае test и test_1 должны быть дельта-таблицами.

person Pabbati    schedule 10.12.2019