Niveaux d'isolation et conflits d'écriture
Les niveaux d'isolement et le comportement en cas de conflit d'écriture déterminent ce qui se passe lorsque des opérations simultanées lisent et écrivent la même table Delta Lake sur Databricks.
Lorsque plusieurs jobs ou utilisateurs écrivent dans la même table en même temps, certaines de ces écritures peuvent échouer avec une exception de conflit. Utilisez les pages de cette section lorsque vous devez :
- Résoudre ou réduire les échecs liés aux écritures concurrentes, comme
ConcurrentAppendException. Voir Exceptions liées aux conflits. - Décidez si une table nécessite une isolation plus forte que celle par default. Voir Niveaux d'isolement (WriteSerializable et Serializable).
Delta Lake garantit les transactions ACID entre les lectures et les écritures :
- Rédacteurs : plusieurs rédacteurs sur plusieurs clusters peuvent modifier simultanément une partition de table. Les rédacteurs voient une vue instantanée cohérente de la table et les écritures se produisent dans un ordre séquentiel.
- Lecteurs : les lecteurs continuent de voir une vue instantanée cohérente de la table avec laquelle le job Databricks a démarré, même lorsqu'une table est modifiée pendant un job.
Voir Quelles sont les garanties ACID sur Databricks ?
Databricks utilise Delta Lake pour toutes les tables par default.
Sujets d'isolation
Sujet | Description |
|---|---|
Comment les deux niveaux d'isolation affectent les opérations concurrentes et comment les configurer. | |
Comment la détection des conflits au niveau des lignes réduit les conflits d’écriture pour les opérations concurrentes sur les mêmes fichiers de données. |
Pour des informations sur l'isolation des transactions, le comportement des instantanés et la gestion des conflits, consultez Isolation des transactions.
Conflits de modification des métadonnées
Les modifications de métadonnées peuvent entraîner l'échec de toutes les opérations d'écriture simultanées. Ces opérations incluent des modifications du protocole de table, des propriétés de table ou du schéma de données.
Les lectures en streaming échouent lorsqu'elles rencontrent un commit qui modifie les métadonnées de la table. Si vous souhaitez que le Stream continue, vous devez le redémarrer. Pour les méthodes recommandées, consultez Considérations de production pour Structured Streaming.
Exemples de query qui modifient des métadonnées :
-- Set a table property
ALTER TABLE table_name SET TBLPROPERTIES ('delta.isolationLevel' = 'Serializable')
-- Enable a feature using a table property and update the table protocol
ALTER TABLE table_name SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
-- Drop a table feature
ALTER TABLE table_name DROP FEATURE deletionVectors;
-- Upgrade to UniForm
REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));
-- Update the table schema
ALTER TABLE table_name ADD COLUMNS (col_name STRING);