Я хотел бы добавить столбец в таблицу, а затем заполнить его значениями из другой таблицы.Ниже приведена упрощенная версия моей проблемы.
CREATE TABLE table_1 (
id INT,
a DECIMAL(19,2)
)
INSERT INTO TABLE table_1 VALUES (1, 3.0)
INSERT INTO TABLE table_1 VALUES (2, 4.0)
CREATE TABLE table_2 (
id INT,
b DECIMAL(19,2),
c DECIMAL(19,2)
)
INSERT INTO TABLE table_2 VALUES (1, 1.0, 4.0)
INSERT INTO TABLE table_2 VALUES (2, 2.0, 1.0)
-- The next two parts illustrate what I'd like to accomplish
ALTER TABLE table_1 ADD COLUMNS (d Decimal(19,2))
UPDATE table_1
SET d = (table_1.a - table_2.b) / table_2.c
FROM table_2
WHERE table_1.id = table_2.id
В конце концов SELECT * FROM table_1
выдаст что-то вроде этого:
+---+----+----+
| id| a| d|
+---+----+----+
| 1|3.00|0.50|
| 2|4.00|2.00|
+---+----+----+
Однако, когда я запускаю команды обновления, Spark(версия 2.4) сразу же жалуется на оператор обновления.
UPDATE table_1 ...
^^^
В конечном итоге мне нужна таблица с тем же именем, что и у исходной таблицы, и с новым столбцом.Используя только Spark SQL, что я могу сделать для достижения своей цели?Кажется, я не могу выполнить обновление, но есть ли хаки SQL, которые я могу сделать, чтобы достичь того же конечного результата?В моей реальной проблеме мне нужно добавить около 100 столбцов в большую таблицу, поэтому решение также не должно снижать производительность или делать много копий данных и занимать место на диске.
Другой способ перефразироватьу меня вопрос, могу ли я выполнить DataBricks, эквивалентный UPDATE
(см. здесь ), используя версию Spark с открытым исходным кодом?