Partager via


UPDATE

S’applique à : case marquée oui Databricks SQL case marquée oui Databricks Runtime

Met à jour les valeurs de colonne pour les lignes qui correspondent à un prédicat. Quand aucun prédicat n’est fourni, met à jour les valeurs de colonne pour toutes les lignes.

Cette instruction est uniquement prise en charge pour les tables Delta Lake.

Syntaxe

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

Paramètres

  • table_name

    Identifie la table à mettre à jour. Le nom de la table ne doit pas utiliser une spécification temporelle ou une spécification d’options.

    table_name ne doit pas être une table source contenant une clé étrangère.

  • table_alias

    Définissez un alias pour la table. L’alias ne doit pas inclure une liste de colonnes.

  • column_name

    Référence à une colonne dans la table. Vous pouvez référencer chaque colonne au maximum une fois.

  • field_name

    Référence à un champ dans une colonne de type STRUCT. Vous pouvez référencer chaque champ au maximum une fois.

  • expr

    Expression arbitraire. Si vous référencez des colonnes table_name, elles représentent l’état de la ligne avant la mise à jour.

  • DEFAULT

    S’applique à : coche marquée oui Databricks SQL coche marquée oui Databricks Runtime 11.3 LTS et versions ultérieures

    Expression DEFAULT de la colonne si une colonne est définie ; sinon, NULL.

  • WHERE

    Filtrez les lignes par prédicat. La clause WHERE peut inclure des sous-requêtes avec les exceptions suivantes :

    • Sous-requêtes imbriquées, à savoir une sous-requête à l’intérieur d’une autre sous-requête
    • Une sous-requête NOT IN à l’intérieur d’un OR, par exemple, a = 3 OR b NOT IN (SELECT c from t)

    Dans la plupart des cas, vous pouvez réécrire des sous-requêtes NOT IN à l’aide de NOT EXISTS. Dans la mesure du possible, vous devez utiliser NOT EXISTS, car UPDATE avec des sous-requêtes NOT IN peut être lent.

Exemples

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