Suivi des lignes dans Databricks
Disponible dans Databricks Runtime 14,1 et versions ultérieures, le suivi des lignes attribue des ID de ligne stables et des versions de commit de ligne à chaque ligne, permettant le suivi de la lignée au niveau des lignes. Certaines mises à jour incrémentielles pour les vues matérialisées nécessitent cette fonctionnalité.
Toutes les tables Apache Iceberg v3 incluent le suivi des lignes. Consultez Utiliser les fonctionnalités d'Apache Iceberg v3. Pour les tables Delta Lake, vous devez explicitement activer le suivi des lignes.
L'activation du suivi des lignes met à niveau le protocole de l'enregistreur de table et pourrait affecter la compatibilité avec les clients externes Delta Lake. Consultez la compatibilité des fonctionnalités et protocoles Delta Lake.
Activer le suivi des lignes sur les tables Delta Lake
Pour activer le suivi des lignes sur une table Delta Lake, définissez la propriété de table delta.enableRowTracking = true lors de la création de la table :
CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;
Pour activer le suivi des lignes sur une table Delta Lake existante, utilisez l’exemple suivant :
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);
L'activation du suivi des lignes sur les tables existantes attribue automatiquement des ID de ligne et des versions de commit de ligne à toutes les lignes existantes de la table. Ce processus pourrait entraîner la création de plusieurs nouvelles versions de la table et prendre un temps considérable pour être achevé.
Si votre table est une cible pour les écritures continues, telles que les workloads Structured Streaming, suspendez les opérations d’écriture avant d’activer le suivi des lignes et reprenez-les une fois l’opération terminée. L’utilisation de ALTER TABLE pour activer le suivi des lignes met à jour les métadonnées de la table, ce qui entraîne l’échec de toute opérations d’écriture concurrente avec un MetadataChangedException pendant la durée de l’opération. Voir les exceptions de conflit.
Le clonage d'une table crée un historique distinct, de sorte que les ID de ligne et les versions de commit de ligne des tables clonées ne correspondent pas à ceux de la table d'origine.
Champs de métadonnées
Le suivi des lignes ajoute deux champs de métadonnées masqués à la table. Vous pouvez ajouter explicitement ces champs à votre query pour renvoyer les valeurs.
Nom de colonne | Type | Valeurs | Explication |
|---|---|---|---|
| Long | L'identifiant unique de la ligne. | Une ligne conserve le même identifiant chaque fois qu'elle est modifiée à l'aide d'une instruction |
| Long | Le log Delta ou la version de la table à laquelle la ligne a été insérée ou mise à jour pour la dernière fois. | Une ligne se voit attribuer une nouvelle version chaque fois qu'elle est modifiée à l'aide d'une instruction |
Certaines opérations stockent ces champs de métadonnées en utilisant le transaction log. L'exécution d'opérations OPTIMIZE ou REORG sur une table avec le suivi des lignes activé réécrit les fichiers de données pour stocker ces champs.
Désactiver le suivi des lignes sur les tables Delta Lake
Pour désactiver le suivi des lignes sur une table Delta Lake, définissez la propriété de table sur false.
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);
La désactivation du suivi des lignes ne supprime pas la fonctionnalité de table correspondante et ne rétrograde pas la version du protocole de table. Cela ne supprime pas non plus les champs de métadonnées de la table cible. Pour supprimer entièrement la fonctionnalité de table et rétrograder le protocole, utilisez DROP FEATURE. Voir Supprimer une fonctionnalité de table Delta Lake et rétrograder le protocole de table.
Après avoir désactivé le suivi des lignes, les identifiants de ligne générés ne sont plus fiables pour le suivi des lignes uniques.
Limitations
Les champs de métadonnées ID de ligne et versions de commit de ligne ne sont pas accessibles lors de la lecture du flux de données de modification. Consultez Utiliser le flux de données de modification sur Databricks.