Aller au contenu principal

application des schémas

Databricks valide la qualité des données en imposant un schéma à l'écriture pour les tables Delta Lake. L'application des schémas ne s'applique pas aux tables utilisant des formats non Delta, tels que les fichiers CSV ou JSON dans le stockage cloud.

Application des schémas pour les INSERT Opérations

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 de la table cible.
remarque

Databricks tente de convertir en toute sécurité les types de données des colonnes pour correspondre à la table cible.

INSERT Exemples

Par exemple, l'insertion d'une ligne avec une colonne qui n'existe pas dans la table cible échoue :

SQL
-- 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 transtypage compatible réussit :

SQL
-- Succeeds: integer 42 is safely cast to BIGINT
INSERT INTO catalog.schema.target_table (id, bigint_column) VALUES (1, 42);

Application des schémas pour les MERGE Opérations

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érations :

  • Si le type de données dans l'instruction source ne correspond pas à la colonne cible, MERGE tente de convertir en toute sécurité les types de données de colonne pour correspondre à la table cible.
  • Les colonnes cibles d'une action UPDATE ou INSERT doivent exister dans la table cible.
  • Lors de l'utilisation de INSERT * ou UPDATE SET *:
    • Le dataset source doit avoir toutes les colonnes présentes dans la table cible.
    • L'application de la règle ignore les colonnes dans le dataset source qui ne sont pas présentes dans la table cible.

MERGE Exemples

Par exemple, le MERGE suivant échoue car la query essaie d'insérer une valeur dans unknown_column, qui n'existe pas dans target_table:

SQL
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 possède les colonnes id et name, et que source_table possède id, name et extra_col. Les MERGE suivants utilisant INSERT * ignorent extra_col dans la source et réussissent car toutes les colonnes cibles sont présentes dans la source :

SQL
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 ALTER TABLE explicites ou de l'évolution automatique des schémas. Voir Mettre à jour les schémas de table avec l'évolution des schémas.

Par exemple, pour ajouter une colonne explicitement :

SQL
ALTER TABLE catalog.schema.table_name ADD COLUMN new_column STRING;

Pour activer l’évolution des schémas automatique 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;

L'évolution des schémas a une sémantique particulière pour les opérations INSERT et MERGE. Voir Activer l'évolution des schémas.

Tables externes

Si vous modifiez les métadonnées d'une table externe directement avec des clients externes en dehors de Databricks ou en utilisant un accès basé sur un chemin, Unity Catalog ne synchronise pas automatiquement les mises à jour du schéma. Cela pourrait empêcher l'application des schémas de s'effectuer correctement.

Exécutez MSCK REPAIR TABLE <table-name> SYNC METADATA pour synchroniser le schéma avec Unity Catalog. Voir REPAIR TABLE.