UPDATE
Область применения: Databricks SQL Databricks Runtime
Обновляет значения столбцов для строк, соответствующих предикату. Если предикат не указан, обновляет значения столбцов для всех строк.
Эта инструкция поддерживается только для таблиц Delta Lake.
Синтаксис
UPDATE table_name [table_alias]
SET { { column_name | field_name } = [ expr | DEFAULT } [, ...]
[WHERE clause]
Параметры
-
Определяет обновляемую таблицу. Имя таблицы не должно содержать временную спецификацию.
table_name
не должно быть внешней таблицей. -
Указывает псевдоним для таблицы. Псевдоним не должен включать список столбцов.
-
Ссылка на столбец в таблице. Вы можете ссылаться на каждый столбец не более одного раза.
-
Ссылка на поле в столбце типа STRUCT. Вы можете ссылаться на каждое поле не более одного раза.
-
Произвольное выражение. Если вы ссылаетесь на столбцы
table_name
, они представляют состояние строки перед обновлением. DEFAULT
Область применения: Databricks SQL Databricks Runtime 11.3 LTS и выше
Выражение
DEFAULT
для столбца, если он определен, в противном случае — значение NULL.-
Фильтрация строк по предикату. Предложение
WHERE
может включать вложенные запросы, за исключением следующих конструкций:- Вложенные запросы, т. е. подзапросы внутри другого подзапроса
- Подзапрос
NOT IN
внутриOR
, напримерa = 3 OR b NOT IN (SELECT c from t)
В большинстве случаев подзапросы
NOT IN
можно переписать с помощьюNOT EXISTS
. Следует везде, где это возможно, использоватьNOT EXISTS
, так как инструкцияUPDATE
с подзапросамиNOT IN
может выполняться достаточно долго.
Примеры
> UPDATE events SET eventType = 'click' WHERE eventType = 'clk'
> UPDATE all_events
SET session_time = 0, ignored = true
WHERE session_time < (SELECT min(session_time) FROM good_events)
> UPDATE orders AS t1
SET order_status = 'returned'
WHERE EXISTS (SELECT oid FROM returned_orders WHERE t1.oid = oid)
> UPDATE events
SET category = 'undefined'
WHERE category NOT IN (SELECT category FROM events2 WHERE date > '2001-01-01')
> UPDATE events
SET ignored = DEFAULT
WHERE eventType = 'unknown'