Vecteurs de suppression dans Databricks

Les vecteurs de suppression sont une fonctionnalité d’optimisation du stockage qui accélère les modifications apportées aux tables. Par défaut, la suppression d’une seule ligne nécessite la réécriture du fichier Parquet entier contenant cet enregistrement. Les vecteurs de suppression évitent cette surcharge. Lorsque les vecteurs de suppression sont activés, les opérations DELETE, UPDATE, et MERGE marquent les lignes comme modifiées sans réécrire le fichier Parquet. Lit ensuite l’état actuel de la table en appliquant les modifications enregistrées dans les vecteurs de suppression.

Databricks recommande d'utiliser Databricks Runtime 14.3 LTS et supérieur pour écrire des tables avec des vecteurs de suppression afin d'utiliser toutes les optimisations. Pour lire des tables avec des vecteurs de suppression activés, utilisez Databricks Runtime 12.2 LTS et versions ultérieures.

Dans Azure Databricks Runtime 14.2 et versions ultérieures, les tables avec vecteurs de suppression prennent en charge la concurrence au niveau des lignes. Consultez la concurrence au niveau des lignes.

Remarque

Pour les mises à jour d’E/S prédictives, Photon utilise des vecteurs de suppression pour accélérer DELETE, MERGEet UPDATE les opérations. Consultez Utiliser des E/S prédictives pour accélérer les mises à jour.

Activer les vecteurs de suppression

Dans les paramètres de l’espace de travail, vous pouvez activer les vecteurs de suppression sur de nouvelles tables lorsque vous utilisez un entrepôt SQL ou Databricks Runtime 14.3 LTS ou version ultérieure. Les paramètres par défaut varient selon la région, consultez les vecteurs de suppression à activation automatique.

Les vecteurs de suppression ne sont pas activés par défaut pour les vues matérialisées et les tables de diffusion en continu stockées dans le metastore Hive.

Pour activer ou supprimer manuellement la prise en charge des vecteurs de suppression sur n’importe quelle table ou vue, y compris les tables de diffusion en continu et les vues matérialisées, utilisez la enableDeletionVectors propriété table. Pour activer les vecteurs de suppression sur une table lorsque vous créez ou modifiez une table :

-- For Delta tables
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);

Vous ne pouvez pas utiliser d’instruction ALTER pour activer ou supprimer des vecteurs de suppression sur une vue matérialisée ou une table streaming.

Pour les tables Iceberg, utilisez iceberg.enableDeletionVectors plutôt que delta.enableDeletionVectors.

Avertissement

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 du vecteur de suppression ne peuvent pas lire la table. Voir la compatibilité des fonctionnalités et les protocoles de Delta Lake.

Dans Databricks Runtime 14.1 et versions ultérieures, vous pouvez supprimer la fonctionnalité de table de vecteurs de suppression pour permettre la compatibilité avec d’autres clients. Consultez Supprimer une fonctionnalité de table Delta Lake et passer à une version antérieure du protocole de table.

Appliquer les modifications aux fichiers de données Parquet

Les vecteurs de suppression indiquent les modifications apportées aux lignes en tant que suppressions réversibles qui modifient logiquement les fichiers de données Parquet existants dans la table. Ces modifications sont appliquées physiquement lorsque l’un des événements suivants entraîne la réécriture des fichiers de données :

  • Une commande OPTIMIZE est exécutée sur la table.
  • Le compactage automatique déclenche une réécriture d’un fichier de données avec un vecteur de suppression.
  • REORG TABLE ... APPLY (PURGE) est exécuté sur la table.

Les événements liés au compactage de fichiers n’ont 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 appliquées physiquement si les fichiers de données cibles ne sont pas candidats à un compactage de fichiers. REORG TABLE ... APPLY (PURGE) réécrit tous les fichiers de données contenant des enregistrements avec des modifications enregistrées à l’aide de vecteurs de suppression. Voir REORG TABLE.

Supprimer physiquement les anciennes données

Les données modifiées peuvent toujours exister dans les anciens fichiers de données d’une table après une opération de vidage. Vous souhaiterez peut-être supprimer physiquement les données, par exemple pour réduire les coûts de stockage avec votre fournisseur de cloud ou pour vous conformer aux demandes RGPD.

Exécutez VACUUM pour supprimer physiquement les anciens fichiers. L’opération REORG TABLE ... APPLY (PURGE) crée une nouvelle version de la table une fois terminée. Pour supprimer entièrement les fichiers supprimés des versions de table précédentes, vous devez définir le seuil de rétention de VACUUM à l'horodatage d’achèvement de l’opération de purge. Consultez Supprimer uniquement les métadonnées pour forcer la réécriture des données.

Améliorer les performances des tables volumineuses

Pour améliorer les performances lorsque vous purgez des données soft-deleted sur des tables volumineuses, définissez l'option spark.databricks.delta.reorg.purgeMode sur rows. Par exemple, définissez cette configuration lorsque vous videz manuellement les données avec REORG TABLE ... APPLY (PURGE) ou lorsque vous supprimez des vecteurs de suppression avec ALTER TABLE DROP FEATURE deletionVectors.

Par défaut, spark.databricks.delta.reorg.purgeMode est défini sur all. Sur les tables volumineuses, cette opération peut être lente, car les opérations de purge doivent analyser tous les pieds de fichier Parquet pour rechercher les données de colonne supprimées et les lignes marquées pour suppression.

La rows valeur limite l’opération pour gérer uniquement les fichiers avec des lignes supprimées de manière réversible. Sur les tables volumineuses, cela peut améliorer les performances si de nombreux fichiers ne contiennent pas de lignes supprimées de manière réversible et que la table n’a pas de colonnes supprimées.

Compatibilité du client

Azure Databricks utilise des vecteurs de suppression pour alimenter les E/S prédictives pour les mises à jour sur le calcul compatible Photon. Consultez Utiliser des E/S prédictives pour accélérer les mises à jour.

La prise en charge de l’utilisation de vecteurs de suppression pour les lectures et les écritures varie selon le client.

Le tableau suivant présente les versions clientes requises pour la lecture et l’écriture de tables avec des vecteurs de suppression activés et spécifie les opérations d’écriture qui utilisent des vecteurs de suppression :

Client Vecteurs de suppression d’écriture Vecteurs de suppression de lecture
Databricks Runtime avec Photon Prend en charge MERGE, UPDATE et DELETE en utilisant Databricks Runtime 12.2 LTS et versions ultérieures. Nécessite Databricks Runtime 12.2 LTS ou version ultérieure.
Databricks Runtime sans Photon Prend en charge DELETE en utilisant Databricks Runtime 12.2 LTS et versions ultérieures. Prend en charge UPDATE en utilisant Databricks Runtime 14.1 et versions supérieures. Prend en charge MERGE en utilisant Databricks Runtime 14.3 LTS et des versions ultérieures. Nécessite Databricks Runtime 12.2 LTS ou version ultérieure.
OSS Apache Spark avec OSS Delta Lake Prend en charge DELETE en utilisant OSS Delta 2.4.0 et versions supérieures. Prend en charge UPDATE en utilisant OSS Delta 3.0.0 et versions supérieures. Nécessite OSS Delta 2.3.0 ou version supérieure.
Destinataires Delta Sharing Les écritures ne sont pas prises en charge sur les tables de partage Delta. Databricks : nécessite Databricks Runtime 14.1 ou version ultérieure. Apache Spark open source : nécessite la version delta-sharing-spark 3.1 ou supérieure.

Pour obtenir de l'assistance pour les autres clients, consultez la documentation des intégrations OSS Delta Lake.

Limites

  • 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é. Consultez Utiliser les fonctionnalités Apache Iceberg v3.
  • Vous ne pouvez pas utiliser une instruction GENERATE pour générer un fichier manifeste pour une table contenant 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 vous assurer qu'aucune opération d'écriture simultanée n'est en cours d'exécution lorsque vous soumettez l'instruction REORG.
  • 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).
  • Si vous activez les vecteurs de suppression sur une vue matérialisée ou une table streaming et supprimez par la suite des vecteurs de suppression, les vecteurs de suppression ne s’appliquent pas aux écritures futures dans la vue ou la table, mais les vecteurs de suppression existants restent.
  • Vous ne pouvez pas rétrograder le protocole de table après avoir activé les vecteurs de suppression sur une vue matérialisée ou une table de streaming. Après l'activation, la fonctionnalité de tableau pour les vecteurs de suppression ne peut pas être supprimée, même si vous désactivez ultérieurement les vecteurs de suppression sur la vue ou le tableau.