Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :
Databricks SQL
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
[ common_table_expression ]
UPDATE table_name [table_alias]
SET { { column_name | field_name } = [ expr | DEFAULT } [, ...]
[WHERE clause]
Paramètres
-
Les expressions de table communes sont une ou plusieurs requêtes nommées qui peuvent être réutilisées plusieurs fois dans le bloc de requête principal afin d’éviter les calculs répétés ou d’améliorer la lisibilité des requêtes complexes et imbriquées.
-
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_namene doit pas être une table source contenant une clé étrangère. -
Définissez un alias pour la table. L’alias ne doit pas inclure une liste de colonnes.
-
Référence à une colonne dans la table. Vous pouvez référencer chaque colonne au maximum une fois.
-
Référence à un champ dans une colonne de type STRUCT. Vous pouvez référencer chaque champ au maximum une fois.
-
Expression arbitraire. Si vous référencez des colonnes
table_name, elles représentent l’état de la ligne avant la mise à jour. PAR DÉFAUT
S’applique à :
Databricks SQL
Databricks Runtime 11.3 LTS et versions ultérieuresExpression
DEFAULTde la colonne si une colonne est définie ; sinon, NULL.-
Filtrez les lignes par prédicat. La clause
WHEREpeut 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’unOR, 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 deNOT EXISTS. Dans la mesure du possible, vous devez utiliserNOT EXISTS, carUPDATEavec des sous-requêtesNOT INpeut être lent.
Mise à jour à partir d’une autre table ou jointure
Databricks SQL ne prend pas en charge la UPDATE ... FROM ... JOIN syntaxe utilisée dans d’autres dialectes SQL (par exemple, mise à jour de colonnes dans une table à partir d’une jointure avec une autre table). Pour mettre à jour une table basée sur une jointure avec une autre table ou une sous-requête, utilisez MERGE INTO plutôt.
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'
L’exemple suivant montre comment mettre à jour une table à partir d’une jointure à l’aide MERGE de la syntaxe non prise en charge UPDATE ... FROM ... JOIN :
-- 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;