Todos los productos
Search
Centro de documentos

Realtime Compute for Apache Flink:Clean up expired data

Última actualización: Sep 03, 2026

Gestione el crecimiento del almacenamiento en tablas de Apache Paimon mediante el control de la retención de instantáneas, la caducidad automática de datos con particiones temporales y la eliminación de archivos huérfanos generados por trabajos con errores.

Solo Realtime Compute for Apache Flink con Ververica Runtime (VVR) 8.0.5 o posterior admite tablas de Apache Paimon.

Funcionamiento

Las tablas de Apache Paimon acumulan tres categorías de almacenamiento que requieren una limpieza periódica:

  • Instantáneas: Cada operación de escritura crea una nueva instantánea. Sin reglas de caducidad, las instantáneas se acumulan indefinidamente, lo que incrementa los costos de almacenamiento y el tiempo necesario para leer los metadatos de la tabla.

  • Particiones: En las tablas con particiones por fecha u hora, las particiones históricas que ya no son necesarias siguen ocupando espacio de almacenamiento a menos que configure su caducidad automática.

  • Archivos huérfanos: Cuando un trabajo falla o se reinicia de forma inesperada, pueden quedar archivos temporales sin confirmar en el directorio de la tabla. Estos archivos no se rastrean en ninguna instantánea y no se pueden eliminar mediante la caducidad normal de instantáneas.

Cada categoría requiere un enfoque de limpieza diferente, que se describe en las siguientes secciones.

Caducidad de instantáneas

Funcionamiento de la caducidad de instantáneas

Tres parámetros controlan cuándo caducan las instantáneas:

Parámetro

Tipo

Valor predeterminado

Descripción

snapshot.num-retained.min

Entero

10

Número mínimo de instantáneas que se conservan

snapshot.num-retained.max

Entero

2,147,483,647

Número máximo de instantáneas que se conservan

snapshot.time-retained

Duración

1h

Antigüedad máxima de la instantánea retenida más antigua

La caducidad se activa cuando se cumple alguna de las siguientes condiciones:

  • El recuento de instantáneas supera snapshot.num-retained.min y la instantánea más antigua tiene una antigüedad mayor que snapshot.time-retained

  • El recuento de instantáneas supera snapshot.num-retained.max

El siguiente ejemplo muestra cómo interactúan estas reglas con snapshot.num-retained.min = 2 y snapshot.time-retained = 1h:

Nueva instantánea

Todas las instantáneas tras la caducidad

Motivo

(snapshot-1, 10:00)

(snapshot-1, 10:00)

Solo hay 1 instantánea: recuento ≤ mín., sin caducidad

(snapshot-2, 10:20)

(snapshot-1, 10:00) (snapshot-2, 10:20)

Hay 2 instantáneas: recuento = mín., sin caducidad

(snapshot-3, 10:40)

(snapshot-1, 10:00) (snapshot-2, 10:20) (snapshot-3, 10:40)

Hay 3 instantáneas > mín., pero snapshot-1 solo tiene 40 min de antigüedad: aún no caduca

(snapshot-4, 11:20)

(snapshot-3, 10:40) (snapshot-4, 11:20)

snapshot-1 ahora tiene 1 h 20 min de antigüedad: recuento > mín. Y antigüedad > time-retained, por lo que snapshot-1 y snapshot-2 caducan

Importante

Las instantáneas se utilizan para restaurar datos históricos. Eliminar una instantánea demasiado pronto puede provocar dos tipos de fallos:

  • Fallos en consultas por lotes durante la lectura. Una consulta por lotes de larga duración lee una instantánea tomada al inicio de la consulta. Si esa instantánea caduca antes de que finalice la consulta, esta falla con un error File xxx not found, Possible causes.

  • Fallo al reiniciar trabajos de streaming. Cuando un trabajo de streaming se reinicia, continúa desde la última instantánea registrada. Si esa instantánea ha caducado, el trabajo no puede reiniciarse.

Establezca snapshot.time-retained como mínimo con la duración de su consulta por lotes más larga o de la ventana de reinicio del trabajo de streaming. Para trabajos de streaming con configuraciones de retención ajustadas, utilice Consumer Id para evitar que caduque la instantánea de la que depende un consumidor.

Configuración de parámetros de retención de instantáneas

Para modificar la retención de instantáneas, ejecute una instrucción ALTER TABLE o use sugerencias SQL en un borrador para la escritura de datos. Para obtener pasos detallados, consulte la sección "Modificar el esquema de una tabla de Apache Paimon" en Manage Apache Paimon catalogs.

Caducidad de particiones

En las tablas con particiones por tiempo, configure la caducidad de particiones para eliminar automáticamente las particiones históricas y liberar espacio de almacenamiento.

Importante

Los archivos de datos de una partición se eliminan por completo solo después de que caducan las instantáneas que contienen los eventos de caducidad de partición relacionados.

Funcionamiento de la caducidad de particiones

Tres parámetros controlan la caducidad de las particiones:

Parámetro

Descripción

Observaciones

partition.expiration-time

Periodo de validez de una partición

Formato de duración; por ejemplo, 12h o 7d

partition.timestamp-pattern

Patrón para convertir un valor de partición en una cadena de tiempo

Haga referencia a cada columna de clave de partición con el prefijo $

partition.timestamp-formatter

Patrón para convertir una cadena de tiempo en una marca de tiempo

El valor predeterminado es yyyy-MM-dd HH:mm:ss o yyyy-MM-dd; acepta cualquier patrón compatible con Java DateTimeFormatter

Una partición se elimina cuando la diferencia entre la hora actual del sistema y la marca de tiempo convertida a partir del valor de la partición supera el valor de partition.expiration-time.

Conversión de valores de partición a marcas de tiempo

El sistema convierte los valores de partición a marcas de tiempo mediante un proceso de dos pasos:

  1. partition.timestamp-pattern convierte un valor de partición en una cadena de tiempo, donde se hace referencia a cada columna de clave de partición como $<column-name>.

  2. partition.timestamp-formatter convierte la cadena de tiempo en una marca de tiempo.

Ejemplos:

Clave de partición única dt con valores como dt=20240308:

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

Tres claves de partición year, month, day con valores como 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

Cuatro claves de partición year, month, day, hour con valores como 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

Configuración de parámetros de caducidad de particiones

Para configurar la caducidad de particiones, ejecute una instrucción ALTER TABLE o use sugerencias SQL en un borrador para la escritura de datos. Para obtener pasos detallados, consulte la sección "Modificar el esquema de una tabla de Apache Paimon" en Manage Apache Paimon catalogs.

Eliminación de archivos huérfanos

Cuando un trabajo falla o se reinicia de forma inesperada, pueden quedar archivos temporales sin confirmar en el directorio de la tabla. Estos archivos huérfanos no están asociados a ninguna instantánea y no se eliminan mediante la caducidad de instantáneas. Utilice el procedimiento del sistema remove_orphan_files para eliminarlos.

De forma predeterminada, solo se eliminan los archivos huérfanos con más de un día de antigüedad. Especifique una marca de tiempo opcional para eliminar los archivos huérfanos creados antes de un momento específico.

Eliminación de archivos huérfanos

  1. Inicie sesión en la consola de Realtime Compute for Apache Flink y cree un script. Para obtener más información, consulte Create a script.

  2. En el editor de scripts, introduzca la siguiente instrucción SQL. Reemplace los marcadores de posición con sus valores reales.

    Marcador de posición

    Descripción

    <catalog-name>

    Nombre del catálogo de Apache Paimon

    <database-name>

    Nombre de la base de datos donde reside la tabla

    <table-name>

    Nombre de la tabla de Apache Paimon

    CALL `<catalog-name>`.sys.remove_orphan_files('<database-name>.<table-name>');

    Para eliminar archivos huérfanos creados antes de una hora específica, agregue una marca de tiempo como segundo argumento:

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

    Este ejemplo elimina los archivos huérfanos en mycat.mydb.mytbl que se crearon a más tardar a las 12:00:00 del 31 de octubre de 2023.

  3. Seleccione la instrucción SQL que introdujo y luego haga clic en Run en la esquina superior izquierda del editor de scripts. Una vez completada la operación, la pestaña Results muestra el número total de archivos eliminados.

Siguientes pasos

  • Para conocer los métodos comunes de optimización para tablas de clave principal de Apache Paimon, consulte Performance optimization.

  • Si un trabajo de streaming falla con el error File xxx not found, Possible causes al leer desde una tabla de Apache Paimon, es posible que la instantánea de la que depende el trabajo haya caducado. Para consultar los pasos de solución de problemas, vea la sección "¿Qué hago si aparece el mensaje de error 'File xxx not found, Possible causes' al leer despliegues desde una tabla de Apache Paimon?" en FAQ about upstream and downstream storage.