Spark
Nivel medio¿Por qué mis tablas Delta/Iceberg se vuelven más lentas cada semana aunque la consulta no cambió?
La consulta es idéntica. La tabla debajo no lo es - cada escritura por micro-batch añade más archivos pequeños, y el tiempo de escaneo sigue casi tanto el número de archivos como el volumen de datos.
Una tabla alimentada cada cinco minutos por un job de streaming acumula miles de archivos pequeños al mes - y cada consulta contra ella paga el overhead por archivo sin importar cuán poco contenga cada uno.
De dónde vienen realmente los archivos pequeños
Los writers de streaming y micro-batch confirman un archivo nuevo (a menudo varios, uno por partición tocada) en cada trigger. Con un trigger de 5 minutos, son cientos de archivos al día por partición - cada uno pequeño, cada uno añadiendo su propio costo de apertura y lectura de metadatos a cada escaneo futuro, sin importar cuán poco contenga realmente.
Qué arregla y qué no arregla OPTIMIZE/compactación
La compactación reescribe muchos archivos pequeños en menos y más grandes, que es lo que realmente arregla el tiempo de escaneo. Lo que no hace: recuperar espacio en disco - los archivos viejos y nuevos deben coexistir, ya que los snapshots anteriores de la tabla (usados para time-travel) todavía referencian a los originales - y no arregla un esquema de particionado que estaba mal desde el principio.
VACUUM es un paso separado y más riesgoso
VACUUM es lo que realmente borra archivos ya no referenciados por el snapshot actual de la tabla, pasada una ventana de retención - ese es el paso que recupera el costo de almacenamiento. Una ventana de retención demasiado corta puede borrar archivos que un lector concurrente o una consulta de time-travel en curso todavía necesita, por eso es un comando separado y deliberado, no algo que la compactación ejecuta automáticamente.
Vea cómo se ve esto en su propio pipeline.
Suba un event log real de Spark, un run_results.json de dbt o una exportación de métricas de Flink y obtenga recomendaciones concretas, que debe aprobar antes de aplicar - no otra regla general.