Tous les produits
Search
Centre de documentation

Realtime Compute for Apache Flink:Clean up expired data

Dernière mise à jour :Aug 09, 2026

Maîtrisez la croissance du stockage dans les tables Apache Paimon en gérant la durée de conservation des snapshots, en expirant automatiquement les données partitionnées par temps et en supprimant les fichiers orphelins laissés par les jobs ayant échoué.

Seule la solution Realtime Compute for Apache Flink utilisant Ververica Runtime (VVR) 8.0.5 ou une version ultérieure prend en charge les tables Apache Paimon.

Fonctionnement

Les tables Apache Paimon accumulent trois catégories de données de stockage nécessitant un nettoyage périodique :

  • Snapshots : Chaque opération d'écriture génère un nouveau snapshot. En l'absence de règles d'expiration, les snapshots s'accumulent indéfiniment, ce qui augmente les coûts de stockage et le temps nécessaire à la lecture des métadonnées de la table.

  • Partitions : Pour les tables partitionnées par date ou par heure, les partitions historiques inutilisées continuent d'occuper de l'espace de stockage, sauf si vous configurez une expiration automatique.

  • Fichiers orphelins : Lorsqu'un job échoue ou redémarre de manière inattendue, des fichiers temporaires non validés peuvent subsister dans le répertoire de la table. Ces fichiers ne sont suivis dans aucun snapshot et ne peuvent pas être supprimés via l'expiration normale des snapshots.

Chaque catégorie requiert une approche de nettoyage distincte, décrite dans les sections ci-dessous.

Expirer les snapshots

Mécanisme d'expiration des snapshots

Trois paramètres déterminent le moment où les snapshots expirent :

Paramètre Type Valeur par défaut Description
snapshot.num-retained.min Entier 10 Nombre minimal de snapshots à conserver
snapshot.num-retained.max Entier 2 147 483 647 Nombre maximal de snapshots à conserver
snapshot.time-retained Durée 1h Âge maximal du snapshot conservé le plus ancien

L'expiration se déclenche lorsque l'une des conditions suivantes est remplie :

  • Le nombre de snapshots dépasse snapshot.num-retained.min et le snapshot le plus ancien est antérieur à la durée définie par snapshot.time-retained

  • Le nombre de snapshots dépasse snapshot.num-retained.max

L'exemple suivant illustre l'interaction de ces règles, avec snapshot.num-retained.min = 2 et snapshot.time-retained = 1h :

Nouveau snapshot Tous les snapshots après expiration Raison
(snapshot-1, 10:00) (snapshot-1, 10:00) Un seul snapshot — le compte est inférieur ou égal au minimum, aucune expiration
(snapshot-2, 10:20) (snapshot-1, 10:00) (snapshot-2, 10:20) Deux snapshots — le compte est égal au minimum, aucune expiration
(snapshot-3, 10:40) (snapshot-1, 10:00) (snapshot-2, 10:20) (snapshot-3, 10:40) Trois snapshots > minimum, mais snapshot-1 n'a que 40 minutes — pas encore expiré
(snapshot-4, 11:20) (snapshot-3, 10:40) (snapshot-4, 11:20) Snapshot-1 a maintenant 1 h 20 min — le compte est supérieur au minimum ET l'âge dépasse time-retained, donc snapshot-1 et snapshot-2 sont expirés
Important

Les snapshots servent à restaurer les données historiques. La suppression prématurée d'un snapshot peut provoquer deux types d'échecs :

  • Échec des requêtes batch en cours de lecture. Une requête batch longue lit un snapshot pris au début de la requête. Si ce snapshot expire avant la fin de la requête, celle-ci échoue avec l'erreur File xxx not found, Possible causes.

  • Échec du redémarrage des jobs streaming. Lors du redémarrage d'un job streaming, celui-ci reprend à partir du dernier snapshot enregistré. Si ce snapshot a expiré, le job ne peut pas redémarrer.

Définissez snapshot.time-retained sur une durée au moins égale à celle de votre requête batch la plus longue ou à la fenêtre de redémarrage de votre job streaming. Pour les jobs streaming avec des paramètres de rétention stricts, utilisez l'ID de consommateur pour empêcher l'expiration du snapshot dont dépend le consommateur.

Définir les paramètres de rétention des snapshots

Pour modifier la rétention des snapshots, exécutez une instruction ALTER TABLE ou utilisez des indices SQL dans un brouillon d'écriture de données. Pour obtenir la procédure détaillée, consultez la section « Modifier le schéma d'une table Apache Paimon » dans la rubrique Gérer les catalogues Apache Paimon.

Expirer les partitions

Pour les tables partitionnées par temps, configurez l'expiration des partitions afin de supprimer automatiquement les partitions historiques et de libérer de l'espace de stockage.

Important

Les fichiers de données d'une partition sont entièrement supprimés uniquement après l'expiration des snapshots contenant les événements d'expiration de partition associés.

Mécanisme d'expiration des partitions

Trois paramètres contrôlent l'expiration des partitions :

Paramètre Description Remarques
partition.expiration-time Durée de validité d'une partition Format de durée, par exemple 12h ou 7d
partition.timestamp-pattern Modèle de conversion d'une valeur de partition en chaîne horaire Référencez chaque colonne de clé de partition avec le préfixe $
partition.timestamp-formatter Modèle de conversion d'une chaîne horaire en horodatage Par défaut yyyy-MM-dd HH:mm:ss ou yyyy-MM-dd ; accepte tout modèle compatible avec Java DateTimeFormatter

Une partition est supprimée lorsque la différence entre l'heure système actuelle et l'horodatage converti à partir de la valeur de partition dépasse la valeur de partition.expiration-time.

Convertir les valeurs de partition en horodatages

Le système convertit les valeurs de partition en horodatages selon un processus en deux étapes :

  1. partition.timestamp-pattern convertit une valeur de partition en chaîne horaire, chaque colonne de clé de partition étant référencée sous la forme $<column-name>.

  2. partition.timestamp-formatter convertit la chaîne horaire en horodatage.

Exemples :

Clé de partition unique dt avec des valeurs telles que dt=20240308 :

'partition.timestamp-pattern' = '$dt',
'partition.timestamp-formatter' = 'yyyyMMdd'

Trois clés de partition year, month, day avec des valeurs telles que year=2023,month=04,day=21 :

'partition.timestamp-pattern' = '$year-$month-$day'
-- No formatter needed: the default pattern yyyy-MM-dd matches the resulting string 2023-04-21

Quatre clés de partition year, month, day, hour avec des valeurs telles que year=2023,month=04,day=21,hour=17 :

'partition.timestamp-pattern' = '$year-$month-$day $hour:00:00'
-- No formatter needed: the default pattern yyyy-MM-dd HH:mm:ss matches the resulting string 2023-04-21 17:00:00

Définir les paramètres d'expiration des partitions

Pour configurer l'expiration des partitions, exécutez une instruction ALTER TABLE ou utilisez des indices SQL dans un brouillon d'écriture de données. Pour obtenir la procédure détaillée, consultez la section « Modifier le schéma d'une table Apache Paimon » dans la rubrique Gérer les catalogues Apache Paimon.

Supprimer les fichiers orphelins

Lorsqu'un job échoue ou redémarre de manière inattendue, des fichiers temporaires non validés peuvent subsister dans le répertoire de la table. Ces fichiers orphelins ne sont associés à aucun snapshot et ne sont pas supprimés par l'expiration des snapshots. Utilisez la procédure système remove_orphan_files pour les supprimer.

Par défaut, seuls les fichiers orphelins âgés de plus d'un jour sont supprimés. Spécifiez un horodatage facultatif pour supprimer les fichiers orphelins créés avant un moment précis.

Supprimer les fichiers orphelins

  1. Connectez-vous à la console Realtime Compute for Apache Flink et créez un script. Pour plus d'informations, consultez la rubrique Créer un script.

  2. Dans l'éditeur de script, saisissez l'instruction SQL suivante. Remplacez les espaces réservés par vos valeurs réelles.

    Espace réservé Description
    <catalog-name> Nom du catalogue Apache Paimon
    <database-name> Nom de la base de données contenant la table
    <table-name> Nom de la table Apache Paimon
    CALL `<catalog-name>`.sys.remove_orphan_files('<database-name>.<table-name>');

    Pour supprimer les fichiers orphelins créés avant une heure spécifique, ajoutez un horodatage comme second argument :

    CALL `mycat`.sys.remove_orphan_files('mydb.mytbl', '2023-10-31 12:00:00');

    Cet exemple supprime les fichiers orphelins dans mycat.mydb.mytbl qui ont été créés au plus tard le 31 octobre 2023 à 12:00:00.

  3. Sélectionnez l'instruction SQL saisie, puis cliquez sur Run dans le coin supérieur gauche de l'éditeur de script. Une fois l'opération terminée, l'onglet Results affiche le nombre total de fichiers supprimés.

Étapes suivantes

  • Pour connaître les méthodes d'optimisation courantes des tables à clé primaire Apache Paimon, consultez la rubrique Optimisation des performances.

  • Si un job streaming échoue avec l'erreur File xxx not found, Possible causes lors de la lecture d'une table Apache Paimon, il se peut que le snapshot dont dépend le job ait expiré. Pour résoudre ce problème, consultez la section « Que faire si le message d'erreur 'File xxx not found, Possible causes' apparaît lors de la lecture des déploiements depuis une table Apache Paimon ? » dans la rubrique FAQ sur le stockage amont et aval.