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'