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.minet le snapshot le plus ancien est antérieur à la durée définie parsnapshot.time-retainedLe 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 |
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.
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 :
partition.timestamp-patternconvertit une valeur de partition en chaîne horaire, chaque colonne de clé de partition étant référencée sous la forme$<column-name>.partition.timestamp-formatterconvertit 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
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.
-
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.mytblqui ont été créés au plus tard le 31 octobre 2023 à 12:00:00. 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 causeslors 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.