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


UPDATE

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

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

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

Синтаксис

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

Parameters

  • table_name

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

    table_name не должно быть иностранным table.

  • table_alias

    Определите псевдоним для table. Псевдоним не должен включать columnlist.

  • column_name

    Ссылка на column в table. Вы можете ссылаться на каждую column не более одного раза.

  • field_name

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

  • expr

    Произвольное выражение. Если вы ссылаетесь на table_namecolumns они представляют состояние строки до update.

  • DEFAULT

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

    Выражение DEFAULT для column, если оно определено, значение 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'