Suppression automatique de lignes avec durée de vie automatique

La durée de vie automatique (Auto-TTL) supprime automatiquement des lignes des tables gérées dans Unity Catalog après un délai configurable, en fonction de la valeur contenue dans une colonne d’horodatage. Vous définissez une période d’expiration en jours et spécifiez une colonne d’horodatage pour la comparaison. Databricks exécute en arrière-plan les opérations DELETE, PURGE et VACUUM pour supprimer les lignes expirées et les supprimer du stockage.

Voici deux exemples montrant comment utiliser le time-to-live automatique :

  • Vous pouvez supprimer des données antérieures à 1 an pour réduire les coûts de stockage. Expire les lignes 1 an après la création en spécifiant une période d’expiration de 365 jours sur une created_at colonne d’horodatage.
  • Vous pouvez supprimer des données marquées pour suppression par un autre processus métier. Expire les lignes 20 jours après le traitement d’une demande de suppression en spécifiant une période d’expiration de 20 jours sur une colonne d’horodatage personnalisée del_request_approved .

Important

Le minutage exact de la suppression n’est pas garanti et peut varier en fonction de la charge système. Pour vérifier la suppression, interrogez la table système de l’optimisation prédictive ou exécutez DESCRIBE HISTORY sur la table. Consultez les tables système.

Le temps de mémoire tampon entre l’expiration de ligne et la suppression définitive peut être jusqu’à 6 jours, plus la valeur de la propriété de la table de rétention des données, qui est définie par défaut sur 7 jours. Pour plus d’informations sur la configuration de la durée de vie automatique à supprimer dans un délai spécifique, consultez Calculer les valeurs de configuration pour une période d’expiration cible et configurer la rétention des données pour les requêtes de voyage dans le temps.

La durée de vie automatique est disponible pour les tables Delta Lake gérées par le catalogue Unity, les tables Apache Iceberg et les tables streaming avec des pipelines Lakeflow.

Requirements

  • Vous devez activer l’optimisation prédictive. Consultez Optimisation prédictive pour les tables managées Unity Catalog.
    • La désactivation de l’optimisation prédictive sur une table avec la durée de vie automatique activée empêche l'exécution de la durée de vie automatique.
  • Vous devez disposer des autorisations MODIFY sur une table pour définir ou supprimer une stratégie de durée de vie automatique. Consultez les autorisations de table de base.
  • Databricks Runtime 17.3 et versions ultérieures.
    • Databricks Runtime 17.2 et les versions ultérieures peuvent lire et écrire dans des tables avec une durée de vie automatique.

Activer la durée de vie automatique

Activez la durée de vie automatique différemment selon la table source :

Tables gérées Delta Lake et Apache Iceberg

Pour définir une stratégie de durée de vie automatique sur une nouvelle table, spécifiez un entier non négatif pour <expiration_days> et une colonne avec un type de DATE, TIMESTAMPou TIMESTAMP_NTZ pour <time_column_name>:

CREATE TABLE table_name DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>;

Pour définir une stratégie de durée de vie automatique sur une table existante :

ALTER TABLE table_name DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>;

Par exemple, pour supprimer les lignes 30 jours après leur created_at horodatage :

ALTER TABLE my_catalog.my_schema.my_table DELETE ROWS 30 DAYS AFTER created_at;

Diffusion en continu de tables avec des pipelines Lakeflow

Pour définir une stratégie de durée de vie automatique sur une nouvelle table de diffusion en continu dans un pipeline, spécifiez deux valeurs. Fournissez un entier non négatif pour <expiration_days> et une colonne de type DATE, TIMESTAMPou TIMESTAMP_NTZ pour <time_column_name>:

SQL

CREATE STREAMING TABLE table_name
DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>
AS SELECT * FROM STREAM(source);

Python

from pyspark import pipelines as dp

@dp.table(
  auto_ttl={"timestamp_column": <time_column_name>, "expire_in_days": <expiration_days>}
)
def function_name():
  return (query)

Il n’est pas possible, via SQL, de modifier une table de streaming afin qu’elle utilise une durée de vie (TTL) automatique. Pour modifier la durée de vie (TTL) automatique d’une table de streaming existante, mettez à jour le code du pipeline et republiez.

Diffusion en continu de lectures à partir de tables avec délai de vie automatique

Si vous utilisez Structured Streaming, des pipelines Lakeflow ou des tables de streaming pour lire depuis une table avec expiration automatique activée, définissez skipChangeCommits sur la lecture en streaming. Les opérations de suppression automatique liées à la durée de vie (TTL) apparaissent comme des modifications de données. Sans ce paramètre, la lecture en streaming échoue lorsque le TTL automatique supprime des lignes.

Consultez les exemples suivants :

Diffusion Structurée

# Source table with auto time-to-live
spark.sql("ALTER TABLE source_table DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>")

# Structured Streaming read
spark.readStream.format("delta").option("skipChangeCommits", "true").table("source_table")

Pipelines de Lakeflow

from pyspark import pipelines as dp

# Source table with auto time-to-live
spark.sql("ALTER TABLE source_table DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>")

# Lakeflow pipelines streaming read
@dp.table
def my_table():
  return spark.readStream.format("delta").option("skipChangeCommits", "true").table("source_table")

Tables de streaming

-- Source table with auto time-to-live
ALTER TABLE source_table DELETE ROWS <expiration_days> DAYS AFTER <time_column_name>;

-- Lakeflow pipelines streaming read
CREATE OR REFRESH STREAMING TABLE my_table AS
SELECT * FROM STREAM(source_table) OPTIONS (skipChangeCommits);

Vérifier que la durée de vie automatique est activée

Utilisez DESCRIBE TABLE EXTENDED pour vérifier que la durée de vie automatique est configurée. Si les propriétés autottl.expireInDays et autottl.timestampColumn sont définies, la durée de vie automatique est activée.

Les paramètres de durée de vie automatique s’affichent dans la ligne Propriétés du tableau :

DESCRIBE TABLE EXTENDED table_name;

Sinon, utilisez SHOW TBLPROPERTIES pour afficher les propriétés de durée de vie (TTL) automatique :

SHOW TBLPROPERTIES table_name;

Désactiver la durée de vie automatique

Pour supprimer une stratégie de durée de vie automatique d’une table Delta Lake ou Apache Iceberg managée :

ALTER TABLE table_name DROP ROW DELETION;

Pour supprimer une stratégie de durée de vie automatique sur une table de diffusion, définissez auto_ttl sur None dans le code du pipeline et republiez :

from pyspark import pipelines as dp

@dp.table(
  auto_ttl=None
)
def function_name():
  return (query)

Cycle de vie des données

La durée de vie automatique peut aider à automatiser la gestion du cycle de vie des données pour les tables avec des exigences de rétention basées sur le temps.

La durée de vie automatique a un cycle de vie de données à plusieurs étapes. Après expiration d’une ligne, l’optimisation prédictive exécute les commandes DELETE et VACUUM de manière asynchrone. Si des vecteurs de suppression sont activés pour la table, l’optimisation prédictive effectue également l’opération PURGE avant VACUUM pour réécrire les fichiers de données et supprimer les lignes supprimées. Consultez Supprimer uniquement les métadonnées pour forcer la réécriture des données.

Le minutage exact de la suppression n’est pas garanti et peut varier en fonction de la charge système. Pour plus d’informations sur la façon de vérifier que les données ont été supprimées, consultez les tables système.

Pour configurer la durée de vie automatique correctement pour vos exigences de rétention des données, passez en revue les étapes ci-dessous :

Stage Durée Description
Période d’expiration L’utilisateur définit cela lors de l’activation de la durée de vie automatique. Nombre de jours après la valeur de colonne de temps lorsqu’une ligne devient éligible à la suppression. Définissez cette valeur lorsque vous activez la durée de vie automatique.
Temps de mémoire tampon Jusqu’à 3 jours par commande (DELETE, VACUUM) Délai entre le moment où les lignes deviennent éligibles à la suppression et lorsque l’optimisation prédictive les supprime. Des retards peuvent survenir entre l’expiration d’une ligne et chaque commande asynchrone, DELETE et VACUUM. Chaque délai est généralement inférieur à 3 jours, jusqu’à un total de 6 jours.
Durée de rétention des données L’utilisateur définit avec une propriété de table. La durée pendant laquelle les lignes supprimées restent dans le stockage et accessibles par voyage temporel. Pour les tables Delta Lake, configurez avec delta.deletedFileRetentionDuration. Pour les tables Apache Iceberg, configurez avec iceberg.deletedFileRetentionDuration. Si la propriété n’est pas définie, la valeur par défaut est de 7 jours. Voir Configurer la conservation des données pour des requêtes de voyage dans le temps.

Après la suppression définitive via VACUUM, les lignes supprimées ne sont plus accessibles par le biais d’un voyage temporel. Consultez Supprimer les fichiers de données inutilisés avec le nettoyage.

Voici une frise chronologique visuelle du cycle de vie des données, où une ligne dont la valeur dans la colonne temporelle est t passe par quatre phases avant que ses fichiers ne soient physiquement supprimés par VACUUM :

Schéma du cycle de vie des données avec durée de vie (TTL) automatique, montrant la période d’expiration, le délai tampon, la période de conservation des données et la phase de suppression définitive sur une chronologie d’une journée.

Calculer les valeurs de configuration pour une période d’expiration cible

Important

La durée de vie automatique supprime les données de façon asynchrone. Consultez le cycle de vie des données.

Pour configurer l’optimisation prédictive afin de supprimer du stockage des lignes dans le nombre de jours visé, soustrayez de votre objectif la durée tampon maximale (6 jours) et la durée de rétention des fichiers supprimés :

target_expiration_days = target_days - 6 - deletedFileRetentionDuration

Par exemple, pour supprimer des lignes au bout de 30 jours avec la durée de rétention par défaut de 7 jours, définissez expiration_days sur 17 DAYS :

target_expiration_days = 30 - 6 - 7 = 17 days

Pour supprimer des lignes au cours des 90 jours avec une période de rétention de 30 jours, définissez expiration_days sur 54 DAYS :

target_expiration_days = 90 - 6 - 30 = 54 days

Surveiller la durée de vie automatique

Avec les tables système, vous pouvez vérifier les événements de durée de vie automatique, surveiller les coûts et définir des alertes en cas d’échec.

Tables système

Vérifiez les événements de durée de vie automatique avec la table système d’optimisation prédictive. L’optimisation prédictive s’exécute DELETE pour supprimer des lignes expirées, VACUUM pour les supprimer du stockage, et éventuellement PURGE pour les tables avec des vecteurs de suppression activés pour créer de nouveaux fichiers sans lignes supprimées.

Exécutez la requête suivante pour examiner les opérations de durée de vie automatique sur toutes les tables au cours des 7 derniers jours :

WITH tables_with_deletes AS (
  SELECT DISTINCT catalog_name, schema_name, table_name
  FROM system.storage.predictive_optimization_operations_history
  WHERE
    operation_type = 'DELETE'
    AND timestampdiff(day, start_time, now()) < 7
)
SELECT hist.*
FROM system.storage.predictive_optimization_operations_history AS hist
INNER JOIN tables_with_deletes AS t
  ON hist.catalog_name = t.catalog_name
  AND hist.schema_name = t.schema_name
  AND hist.table_name = t.table_name
WHERE
  hist.operation_type IN ('DELETE', 'PURGE', 'VACUUM')
  AND timestampdiff(day, hist.start_time, now()) < 7
ORDER BY hist.start_time DESC;

Définir une alerte pour les échecs de durée de vie automatique

Pour recevoir des notifications lorsque les opérations de durée de vie automatique échouent, créez une alerte Databricks SQL avec une requête qui recherche les opérations ayant échoué dans la table système d’optimisation prédictive. Consultez l’alerte Databricks SQL pour obtenir des instructions sur la création d’alertes et la documentation sur les tables système pour obtenir des exemples de requêtes.

Estimer les coûts de durée de vie automatique

Utilisez la requête suivante pour voir le nombre d’opérations de durée de vie automatique des unités de base de données consommées au cours des 30 derniers jours :

WITH tables_with_deletes AS (
  SELECT DISTINCT table_name
  FROM system.storage.predictive_optimization_operations_history
  WHERE
    operation_type = 'DELETE'
    AND timestampdiff(day, start_time, now()) < 30
)
SELECT SUM(usage_quantity) AS total_estimated_dbu
FROM system.storage.predictive_optimization_operations_history AS hist
INNER JOIN tables_with_deletes AS t
  ON hist.table_name = t.table_name
WHERE
  hist.operation_type IN ('DELETE', 'PURGE', 'VACUUM')
  AND hist.usage_unit = 'ESTIMATED_DBU'
  AND timestampdiff(day, hist.start_time, now()) < 30;

Examiner les opérations d’une table spécifique

Permet DESCRIBE HISTORY de voir les opérations récentes s’exécuter sur une table spécifique :

DESCRIBE HISTORY table_name;

Limites

Les limitations suivantes s’appliquent à la durée de vie automatique :

Important

Le minutage exact de la suppression n’est pas garanti et peut varier en fonction de la charge système. Pour plus d’informations sur la façon de vérifier que les données ont été supprimées, consultez les tables système.

  • La durée de vie automatique n’est pas prise en charge pour les vues matérialisées.
  • Les syntaxes ALTER TABLE et ALTER STREAMING TABLE ne sont pas prises en charge pour modifier la durée de vie (TTL) automatique des tables de streaming. Pour ajouter ou modifier une stratégie TTL automatique sur une table de streaming existante, mettez à jour le paramètre auto_ttl dans le code du pipeline, puis republiez le pipeline.
  • Le changement de nom de colonne n’est pas pris en charge pour les colonnes temporelles définies dans une stratégie de durée de vie automatique. Si le mappage de colonnes est activé, cette limitation s’applique toujours. Voir Renommer et supprimer des colonnes avec le mappage de colonnes Delta Lake.
  • Dans de rares cas, les opérations de durée de vie automatiques peuvent entraîner des conflits de transaction. Pour réduire le risque de conflits entre transactions, utilisez le Liquid Clustering, ce qui réduit les conflits liés à la concurrence au niveau des lignes. Consultez Utilisation de Liquid Clustering pour les tables.
  • Si le calcul serverless ne peut pas accéder à ADLS en raison d’un lien privé, les opérations automatiques de durée de vie peuvent échouer. Afficher le message d’erreur de liaison privée