UPDATE
Aplica-se a: SQL do Databricks Runtime do Databricks
Atualiza os valores de coluna para as linhas que correspondem a um predicado. Quando nenhum predicado for fornecido, atualize os valores de coluna em todas as linhas.
Só há suporte para essa instrução em tabelas do Delta Lake.
Sintaxe
UPDATE table_name [table_alias]
SET { { column_name | field_name } = [ expr | DEFAULT } [, ...]
[WHERE clause]
Parâmetros
-
Identifica a tabela a ser atualizada. O nome da tabela não deve incluir uma especificação temporal.
A
table_name
não deve ser uma tabela estrangeira. -
Define um alias para a tabela. O alias não deve incluir uma lista de colunas.
-
Uma referência a uma coluna na tabela. Você pode referenciar cada coluna no máximo uma vez.
-
Uma referência ao campo dentro de uma coluna do tipo STRUCT. Você pode referenciar cada campo no máximo uma vez.
-
Uma expressão arbitrária. Se você referenciar a colunas
table_name
, elas representam o estado da linha antes da atualização. DEFAULT
Aplica-se a: SQL do Databricks Databricks Runtime 11.3 LTS e superior
A expressão
DEFAULT
da coluna se uma for definida, caso contrário será NULL.-
Filtra as linhas por predicado. A cláusula
WHERE
pode incluir subconsultas com as seguintes exceções:- Subconsultas aninhadas, ou seja, uma subconsulta dentro de outra subconsulta
- Uma subconsulta
NOT IN
dentro de umaOR
, por exemplo,a = 3 OR b NOT IN (SELECT c from t)
Na maioria dos casos, você pode regenerar as subconsultas
NOT IN
usandoNOT EXISTS
. Você deve usarNOT EXISTS
sempre que possível, pois aUPDATE
com as subconsultasNOT IN
pode ficar lenta.
Exemplos
> 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'