UPDATE

Platí pro:označeno jako ano Databricks SQL označeno jako ano Databricks Runtime

Aktualizuje hodnoty sloupců pro řádky, které odpovídají predikátu. Pokud není k dispozici žádný predikát, aktualizujte hodnoty sloupců pro všechny řádky.

Toto tvrzení platí pouze pro tabulky Delta Lake.

Syntaxe

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

Parametry

  • společný výraz tabulky

    Běžné výrazy tabulek (CTE) jsou jeden nebo více pojmenovaných dotazů, které je možné opakovaně použít v rámci hlavního bloku dotazu, aby nedocházelo k opakovaným výpočtům nebo ke zlepšení čitelnosti složitých vnořených dotazů.

  • table_name

    Identifikuje tabulku, která se má aktualizovat. Název tabulky nesmí používat dočasnou specifikaci nebo specifikaci možností.

    table_name nesmí být cizí tabulka.

  • table_alias

    Definujte alias tabulky. Alias nesmí obsahovat seznam sloupců.

  • column_name

    Odkaz na sloupec v tabulce Na každý sloupec můžete odkazovat maximálně jednou.

  • field_name

    Odkaz na pole v rámci sloupce typu STRUCT. Na každé pole můžete odkazovat maximálně jednou.

  • výraz

    Libovolný výraz. Pokud odkazujete na table_name sloupce, představují stav řádku před aktualizací.

  • VÝCHOZÍ

    Platí pro:zaškrtnuto ano Databricks SQL zaškrtnuto ano Databricks Runtime 11.3 LTS a vyšší

    Výraz DEFAULT pro sloupec, pokud je definován, NULL jinak.

  • WHERE

    Filtrovat řádky podle predikátu Klauzule WHERE může obsahovat poddotazy s následujícími výjimkami:

    • Vnořené poddotazy, což znamená poddotaz umístěný uvnitř jiného poddotazu
    • Poddotaz NOT IN uvnitř OR, například a = 3 OR b NOT IN (SELECT c from t)

    Ve většině případů můžete poddotazy přepsat NOT IN pomocí NOT EXISTS. Měli byste použít NOT EXISTS kdykoli je to možné, protože UPDATE s NOT IN poddotazy může být pomalé.

Aktualizace z jiné tabulky nebo spojení

Databricks SQL nepodporuje syntaxi použitou UPDATE ... FROM ... JOIN v některých jiných dialektech SQL (například aktualizace sloupců v tabulce z spojení s jinou tabulkou). Pokud chcete tabulku aktualizovat na základě spojení s jinou tabulkou nebo poddotazem, použijte MERGE INTO místo toho.

Příklady

> 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'

Následující příklad ukazuje, jak aktualizovat tabulku z spojení pomocí namísto MERGE nepodporované UPDATE ... FROM ... JOIN syntaxe:

-- Equivalent to (not supported in Databricks): UPDATE t1 SET t1.c1 = t2.c1 FROM t1 INNER JOIN t2 ON t1.c2 = t2.c2
> MERGE INTO t1
  USING t2 ON t1.c2 = t2.c2
  WHEN MATCHED THEN UPDATE SET t1.c1 = t2.c1;