Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure Databricks valide la qualité des données en appliquant le schéma en écriture pour les tables Delta Lake. L’application du schéma ne s’applique pas aux tables utilisant des formats non Delta, tels que des fichiers CSV ou JSON dans le stockage cloud.
Validation du schéma pour les opérations INSERT
Azure Databricks applique les règles suivantes lors de l’insertion de données dans une table :
- Toutes les colonnes insérées doivent exister dans la table cible.
- Tous les types de données de colonne doivent correspondre aux types de données de colonne dans la table cible.
Note
Azure Databricks tente de convertir en toute sécurité les types de données de colonne pour qu’ils correspondent à la table cible.
INSERT Exemples
Par exemple, l’insertion d’une ligne avec une colonne qui n’existe pas dans la table cible échoue :
-- Fails: unknown_column does not exist in target_table
INSERT INTO catalog.schema.target_table (id, unknown_column) VALUES (1, 'value');
L’insertion avec un cast de type compatible réussit :
-- Succeeds: integer 42 is safely cast to BIGINT
INSERT INTO catalog.schema.target_table (id, bigint_column) VALUES (1, 42);
Validation du schéma pour les opérations MERGE
Azure Databricks applique les règles suivantes lors de l’insertion ou de la mise à jour de données dans le cadre d’une MERGE opération :
- Si le type de données de l’instruction source ne correspond pas à la colonne cible,
MERGEtente de convertir en toute sécurité les types de données de colonne pour qu’ils correspondent à la table cible. - Les colonnes cibles d’une action
UPDATEouINSERTdoivent exister dans la table cible. - Lorsque vous utilisez
INSERT *ouUPDATE SET *:- Le jeu de données source doit avoir toutes les colonnes présentes dans la table cible.
- L’application de la contrainte ignore les colonnes du jeu de données source qui ne sont pas présentes dans la table cible.
MERGE Exemples
Par exemple, la requête suivante MERGE échoue, car la requête tente d’insérer une valeur dans unknown_column, qui n’existe pas dans target_table :
MERGE INTO catalog.schema.target_table AS t
USING catalog.schema.source_table AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET t.unknown_column = s.value
WHEN NOT MATCHED THEN INSERT (id, unknown_column) VALUES (s.id, s.value);
Dans un autre exemple, supposons que target_table comporte les colonnes id et name, et que source_table comporte id, name et extra_col. L’élément suivant MERGE avec INSERT * ignore extra_col dans la source et réussit, car toutes les colonnes cibles sont présentes dans la source :
MERGE INTO catalog.schema.target_table AS t
USING catalog.schema.source_table AS s
ON t.id = s.id
WHEN NOT MATCHED THEN INSERT *;
Modifier un schéma de table
Vous pouvez mettre à jour le schéma d’une table à l’aide d’instructions explicites ALTER TABLE ou de l’évolution automatique du schéma. Consultez Mettre à jour les schémas de table avec l’évolution du schéma.
Par exemple, pour ajouter une colonne explicitement :
ALTER TABLE catalog.schema.table_name ADD COLUMN new_column STRING;
Pour activer l’évolution automatique du schéma pour une opération d’écriture, définissez l’option mergeSchema :
SQL
SET spark.databricks.delta.schema.autoMerge.enabled = true;
INSERT INTO catalog.schema.table_name SELECT * FROM source_table;
Python
df.write.option("mergeSchema", "true").mode("append").saveAsTable("catalog.schema.table_name")
L’évolution du schéma a une sémantique spéciale pour les opérations INSERT et MERGE. Consultez Activer l’évolution du schéma.
Tables externes
Si vous modifiez les métadonnées d'une table externe directement avec des clients externes en dehors de Azure Databricks ou en utilisant l'accès basé sur le chemin, Unity Catalog ne synchronise pas automatiquement les mises à jour du schéma. Cela peut empêcher l’application des contraintes du schéma de s’effectuer correctement.
Exécutez MSCK REPAIR TABLE <table-name> SYNC METADATA pour synchroniser le schéma avec Unity Catalog. Voir REPAIR TABLE.