Поделиться через


UPDATE

Область применения:флажок Databricks SQL флажок Databricks Runtime

Обновляет значения столбцов для строк, соответствующих предикату. Если предикат не указан, обновите значения столбцов для всех строк.

Это выражение поддерживается только для таблиц Delta Lake.

Синтаксис

UPDATE table_name [table_alias]
   SET  { { column_name | field_name }  = [ expr | DEFAULT } [, ...]
   [WHERE clause]

Параметры

  • table_name

    Определяет таблицу для обновления. Имя таблицы не должно использовать темпоральную спецификацию или спецификацию параметров.

    table_name не может быть внешней таблицей.

  • table_alias

    Определите псевдоним таблицы. Псевдоним не должен содержать список столбцов.

  • column_name

    Ссылка на столбец в таблице. Вы можете ссылать каждый столбец по крайней мере один раз.

  • field_name

    Ссылка на поле в столбце типа STRUCT. Вы можете ссылаться на каждое поле не более одного раза.

  • expr

    Произвольное выражение. Если вы ссылаетесь на столбцы table_name, они представляют состояние строки до обновления.

  • DEFAULT

    Область применения:флажок Databricks SQL флажок Databricks Runtime 11.3 LTS и выше

    Выражение DEFAULT столбца, если оно определено, значение NULL в противном случае.

  • WHERE

    Фильтрация строк по предикату. Предложение 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'