Vecteurs de suppression dans Databricks
Les vecteurs de suppression accélèrent les opérations DELETE, UPDATE et MERGE sur les tables Delta Lake et Apache Iceberg. Sans vecteurs de suppression, la modification d'une seule ligne nécessite la réécriture de l'intégralité du fichier Parquet contenant cet enregistrement. Les vecteurs de suppression marquent les lignes comme modifiées dans les métadonnées, et les lectures appliquent les entrées des vecteurs de suppression au moment de la query pour résoudre l'état actuel de la table.
Pour les mises à jour d'E/S prédictives, Photon utilise des vecteurs de suppression pour accélérer les DELETE, les MERGE et les UPDATE opérations. Consultez Utiliser les E/S prédictives pour accélérer les mises à jour.
Prérequis
Toutes les tables Apache Iceberg v3 incluent des vecteurs de suppression par default. Consultez Utiliser les fonctionnalités d'Apache Iceberg v3. Pour les tables Delta Lake, vous devez explicitement activer les vecteurs de suppression.
Pour écrire des tables avec des vecteurs de suppression en utilisant toutes les optimisations, utilisez Databricks Runtime 14.3 LTS et versions ultérieures. Pour les lire, utilisez Databricks Runtime 12.2 LTS et versions ultérieures.
Dans Databricks Runtime 14.2 et supérieur, les tables avec vecteurs de suppression prennent en charge la concurrence au niveau des lignes. Consultez Simultanéité au niveau des lignes.
Compatibilité client
Databricks utilise les vecteurs de suppression pour optimiser les E/S prédictives pour les mises à jour sur le compute compatible Photon. Consultez Utiliser l’E/S prédictive pour accélérer les mises à jour.
La prise en charge de l'utilisation des vecteurs de suppression pour les lectures et les écritures varie selon le client.
Le tableau suivant répertorie les versions clientes requises pour lire et écrire les tables de vecteurs de suppression :
Client | Écrire les vecteurs de suppression | Lire les vecteurs de suppression |
|---|---|---|
Databricks Runtime avec Photon | Prend en charge | Nécessite Databricks Runtime 12.2 LTS ou une version ultérieure. |
Databricks Runtime sans Photon | Prend en charge | Nécessite Databricks Runtime 12.2 LTS ou une version ultérieure. |
OSS Apache Spark avec OSS Delta Lake | Prend en charge | Nécessite OSS Delta 2.3.0 ou supérieur. |
Destinataires OpenSharing | Les écritures ne sont pas prises en charge sur les tables OpenSharing. | Databricks nécessite Databricks Runtime 14.1 ou une version supérieure. Apache Spark open source nécessite |
Pour la prise en charge d’autres clients, consultez la documentation sur les intégrations OSS Delta Lake.
Activer les vecteurs de suppression
Dans les paramètres du Workspace, vous pouvez activer les vecteurs de suppression sur les nouvelles tables lorsque vous utilisez un SQL Warehouse ou Databricks Runtime 14.3 LTS ou version ultérieure. Les paramètres par default varient selon la région, consultez Activer automatiquement les vecteurs de suppression.
Les vecteurs de suppression ne sont pas activés par default pour les vues matérialisées et les tables de streaming stockées dans le Hive metastore.
Pour activer ou supprimer manuellement les vecteurs de suppression sur une table ou une vue, utilisez la propriété de table enableDeletionVectors.
Pour activer les vecteurs de suppression sur une table lors de sa création ou de sa modification :
- Delta Lake table
- Iceberg table
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
CREATE TABLE <table-name> [options] TBLPROPERTIES ('iceberg.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('iceberg.enableDeletionVectors' = true);
Vous ne pouvez pas utiliser une instruction ALTER pour activer ou supprimer des vecteurs de suppression sur une vue matérialisée ou une table de streaming. Vous devez utiliser une instruction CREATE TABLE.
Lorsque vous activez les vecteurs de suppression, Databricks met à niveau le protocole de table. Après la mise à niveau, les clients sans prise en charge des vecteurs de suppression ne peuvent pas lire la table. Voir Compatibilité des fonctionnalités et protocoles de Delta Lake.
Avec Databricks Runtime 14.1 et versions ultérieures, vous pouvez supprimer la fonctionnalité de table des vecteurs de suppression pour permettre la compatibilité avec d'autres clients. Voir supprimer une fonctionnalité de table Delta Lake et rétrograder le protocole de table.
Appliquer des suppressions logiques aux fichiers de données
Les vecteurs de suppression marquent les modifications apportées aux lignes comme des suppressions logiques qui modifient logiquement les fichiers de données Parquet existants dans la table. Pour réécrire physiquement les fichiers de données Parquet, effectuez l'une des opérations suivantes :
- Exécuter
OPTIMIZEsur la table. - Exécutez
REORG TABLE ... APPLY (PURGE)sur la table. Cette commande réécrit tous les fichiers de données contenant des enregistrements avec des modifications de vecteur de suppression. See REORG TABLE. - Exécutez une écriture avec auto-compactage, ce qui Trigger une réécriture d'un fichier de données avec un vecteur de suppression.
Les événements de compactage de fichiers n'offrent pas de garanties strictes pour la résolution des modifications enregistrées dans les vecteurs de suppression. Certaines modifications enregistrées dans les vecteurs de suppression peuvent ne pas être physiquement appliquées si les fichiers de données cibles ne sont pas candidats à la compaction de fichiers.
Supprimer physiquement les anciennes données
Les données modifiées peuvent encore exister dans les anciens fichiers de données d'une table après une opération de purge. Vous pouvez souhaiter supprimer physiquement les données, par exemple, pour réduire les coûts de stockage auprès de votre fournisseur de cloud ou pour vous conformer aux demandes GDPR.
Pour supprimer physiquement les anciennes données :
- Exécuter
REORG TABLE ... APPLY (PURGE) - Exécutez
VACUUMavec le threshold de rétention défini à l'horodatage de fin de purge pour supprimer physiquement les fichiers des versions de table précédentes. Consultez Purger les suppressions de métadonnées uniquement pour forcer la réécriture des données.
Améliorer les performances pour les grandes tables
Pour améliorer les performances des purges sur les grandes tables, définissez spark.databricks.delta.reorg.purgeMode sur rows.
Par exemple, définissez cette configuration lorsque vous purgez manuellement les données avec REORG TABLE ... APPLY (PURGE) ou lorsque vous supprimez les vecteurs de suppression avec ALTER TABLE DROP FEATURE deletionVectors.
Par défaut, spark.databricks.delta.reorg.purgeMode est default sur all. Sur les grandes tables, cette opération peut être lente car les opérations de purge doivent analyser tous les pieds de fichier Parquet pour vérifier les données de colonnes supprimées et les lignes supprimées de manière logique.
La valeur rows limite l'opération à traiter uniquement les fichiers avec des lignes supprimées de manière logique. Sur les grandes tables, cela pourrait améliorer les performances si de nombreux fichiers ne contiennent pas de lignes supprimées de manière logique et si la table n'a pas de colonnes supprimées.
Limitations
-
UniForm Iceberg v2 ne prend pas en charge les vecteurs de suppression. Apache Iceberg v3 prend en charge les vecteurs de suppression sur les tables avec UniForm activé. Voir Utiliser les fonctionnalités d'Apache Iceberg v3.
-
Vous ne pouvez pas utiliser une instruction GENERATE pour générer un fichier manifeste pour une table qui a des fichiers utilisant des vecteurs de suppression. Pour générer un manifeste, exécutez d'abord une instruction REORG TABLE … APPLY (PURGE), puis exécutez l'instruction
GENERATE. Vous devez vérifier qu'aucune opération d'écriture concurrente n'est en cours d'exécution lorsque vous soumettez l'instructionREORG.- Vous ne pouvez pas générer de manière incrémentielle des fichiers manifestes pour une table avec des vecteurs de suppression activés (par exemple, en définissant la propriété de table
delta.compatibility.symlinkFormatManifest.enabled=true).
- Vous ne pouvez pas générer de manière incrémentielle des fichiers manifestes pour une table avec des vecteurs de suppression activés (par exemple, en définissant la propriété de table
-
Si vous activez les vecteurs de suppression sur une vue matérialisée ou une table Streaming et que vous supprimez par la suite les vecteurs de suppression, ceux-ci ne s'appliquent pas aux futures écritures sur la vue ou la table, mais les vecteurs de suppression existants subsistent.
-
Vous ne pouvez pas déclasser le protocole de table après avoir activé les vecteurs de suppression sur une vue matérialisée ou une table Streaming, même si vous désactivez ensuite les vecteurs de suppression.