Compartir por


Compactación de tablas delta

Los archivos de tabla delta se fragmentan con el tiempo. La fragmentación aumenta la sobrecarga de la operación de archivo, reduce la eficacia de la compresión y puede limitar el paralelismo del lector. La compactación vuelve a escribir muchos archivos pequeños en menos archivos de tamaño correcto para que Spark pueda leer y procesar datos de forma más eficaz.

El OPTIMIZE comando es la operación de compactación principal. Agrupa archivos pequeños en contenedores destinados a un tamaño de archivo ideal y, a continuación, los vuelve a escribir en el almacenamiento.

Para obtener instrucciones entre cargas de trabajo sobre las estrategias de compactación en el punto de conexión de SQL Analytics, Power BI Direct Lake y Spark, consulte Optimización y mantenimiento de tablas entre cargas de trabajo.

Métodos de compactación

Microsoft Fabric ofrece varios enfoques para mantener los tamaños de archivo óptimos en tablas Delta:

Comando OPTIMIZE

El OPTIMIZE comando es la operación fundamental para compactar tablas Delta. Vuelve a escribir archivos pequeños en archivos más grandes para mejorar el diseño de datos en tablas Delta.

OPTIMIZE dbo.table_name
Propiedad Description Valor predeterminado Configuración de sesión
minFileSize Los archivos que son más pequeños que este umbral se agrupan y se vuelven a escribir como archivos más grandes. 1073741824 (1g) spark.databricks.delta.optimize.minFileSize
maxFileSize Tamaño del archivo de destino generado por el OPTIMIZE comando . 1073741824 (1g) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE es idempotente, pero un tamaño excesivo minFileSize puede aumentar la amplificación de escritura. Por ejemplo, con minFileSize establecido en 1 GB, es posible que se vuelva a escribir un archivo de 900 MB después de una pequeña escritura adicional. Para obtener instrucciones de administración automáticas de tamaño de archivo, consulte Tamaño de archivo de destino adaptable.

OPTIMIZE con Z-Order

Cuando se usa la ZORDER BY cláusula , OPTIMIZE vuelve a escribir los archivos activos para que las filas con valores similares se coloquen en los mismos archivos. Esto mejora la omisión de archivos para filtros selectivos. Utilice Z-Order cuando:

  • Las consultas filtran con frecuencia dos o más columnas juntas (por ejemplo, fecha + customer_id) y
  • Esos predicados son lo suficientemente selectivos como para que la omisión en el nivel de archivo reduzca el número de archivos examinados.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE con orden V

La VORDER cláusula da como resultado los archivos objeto de compactación a los que se les ha aplicado la optimización de orden V. Para más información sobre V-Order, consulte la documentación detallada.

OPTIMIZE dbo.table_name VORDER

OPTIMIZE con agrupación en clústeres líquidos

La agrupación en clústeres líquidos se especifica como opción de tabla; consulte Habilitación de la agrupación en clústeres líquidos para obtener más información. Cuando se habilita la agrupación en clústeres líquidos, OPTIMIZE realiza la reescritura física que aplica la directiva de agrupación en clústeres.

Importante

Los datos solo se agrupan cuando OPTIMIZE se ejecuta en tablas habilitadas para liquid clustering. Las operaciones de escritura normales NO agrupan los datos. Contar con una estrategia de compactación, como el uso de la compactación automática o la programación manual de trabajos de optimización, es fundamental para garantizar que se puedan aprovecharse las ventajas de los datos agrupados (es decir, mejorar la omisión de archivos Delta).

Optimización rápida

Optimización rápida analiza inteligentemente los archivos de tabla Delta y omite las operaciones de compactación que probablemente no mejorarán significativamente el rendimiento.

En lugar de compactar los archivos de forma ciega cada vez que existan archivos pequeños, la optimización rápida evalúa si cada contenedor candidato (grupo de archivos pequeños) cumple los objetivos de compactación de procedimientos recomendados configurables. Fast Optimize solo ejecuta la compactación en un conjunto de archivos si al combinarlos es probable que alcancen su tamaño mínimo objetivo o si hay demasiados archivos pequeños. De lo contrario, omite ese grupo o reduce el número de archivos que compacta.

SET spark.microsoft.delta.optimize.fast.enabled = TRUE

La función Fast Optimize puede afinarse basándose en tus expectativas específicas de compactación.

Propiedad Description Valor predeterminado Configuración de sesión
minNumFiles Número de archivos pequeños que deben existir en un contenedor para que se realice la optimización si el contenedor no contiene suficientes datos estimados para generar un archivo compactado . 50 spark.microsoft.delta.optimize.fast.minNumFiles
parquetCoefficient Multiplicado por el tamaño mínimo de archivo de contexto optimizado para determinar la cantidad mínima de datos de archivo pequeños que deben existir en un contenedor para que el contenedor se incluya en el ámbito de compactación. 1.3 spark.microsoft.delta.optimize.fast.parquetCoefficient

Nota:

El parquetCoefficient da como resultado que el tamaño objetivo de un bin sea mayor que el tamaño objetivo mínimo de archivo en el contexto de optimización. Este coeficiente tiene en cuenta la realidad de que combinar varios archivos parquet pequeños da como resultado una mejor compresión y, por tanto, menos datos que la suma de archivos pequeños. Este valor se puede aumentar para ser más conservador en la frecuencia con la que la optimización rápida omitirá los contenedores o disminuirá para permitir que se omitan más contenedores permisivos.

Cómo funciona

La optimización rápida presenta comprobaciones adicionales antes de compactar los contenedores. Para cada cubo candidato, la optimización rápida evalúa:

  • Cantidad estimada de datos sin procesar en el contenedor (suma de tamaños de archivo pequeños)
  • Ya sea que combinar los archivos pequeños se estime que producirá un archivo que cumpla con el tamaño mínimo de destino configurado.
  • Si el contenedor contiene al menos el número mínimo configurado de archivos pequeños

La optimización rápida evalúa cada contenedor de archivos pequeños y solo compacta los archivos pequeños que probablemente alcancen el tamaño de destino mínimo o supere el número mínimo de archivos. Los contenedores que no alcanzan estos umbrales se pasan por alto o se compactan parcialmente. La omisión de contenedores poco óptimos reduce las reescrituras innecesarias, reduce la amplificación de escritura y hace que los trabajos OPTIMIZE sean más idempotentes.

Captura de pantalla en la que se muestra cómo se evalúa la optimización rápida si se compacta un contenedor.

Nota:

La implementación exacta está sujeta a una evolución a lo largo del tiempo.

La optimización rápida puede reducir los datos reescritos a lo largo de un ciclo de vida de la tabla Delta. Como se muestra en el diagrama siguiente, la optimización rápida omite los cubos poco óptimos, lo que da lugar a trabajos más rápidos y más idempotentes OPTIMIZE con menos amplificación de escritura.

Captura de pantalla que muestra la rapidez con la que la optimización da como resultado menos reescritura de datos a lo largo del tiempo.

Nota:

Solo con fines ilustrativos, los diagramas anteriores asumen que el tamaño del archivo escrito a partir de la compactación es la suma del tamaño de los archivos pequeños. También implica un parquetCoefficient de 1.

Limitaciones
  • No es aplicable a las operaciones de agrupación en clústeres líquidos y orden Z
  • La optimización rápida no modifica el comportamiento de la compactación automática

Destinos de compactación de nivel de archivo

Para evitar la recompilación de los datos que se consideraron previamente como compactados (lo suficientemente grandes) basándose en un cambio en los objetivos de tamaño mínimo y máximo de archivo, se puede habilitar spark.microsoft.delta.optimize.fileLevelTarget.enabled para evitar la recompilación de archivos que ya habían sido compactados. Cuando está habilitado, los archivos no se vuelven a compactar si anteriormente cumplían al menos la mitad del tamaño objetivo del archivo en el momento de la recompresión. El mantenimiento de destinos de nivel de archivo minimiza la amplificación de escritura a medida que cambia el tamaño de destino de compactación a lo largo del tiempo (por ejemplo, desde la evaluación del tamaño del archivo de destino adaptable y la configuración de un destino mayor). Si está habilitado, la etiqueta OPTIMIZE_TARGET_SIZE se agrega a nuevos archivos cuando se ejecuta OPTIMIZE o para cualquier operación de escritura si se establece la propiedad delta.targetFileSize o la tabla delta.targetFileSize.adaptive.

Nota:

Aunque no está habilitado de forma predeterminada, Microsoft recomienda habilitar destinos de compactación de nivel de archivo para limitar la posible amplificación de escritura.

SET spark.microsoft.delta.optimize.fileLevelTarget.enabled = TRUE

Compactación automática

La compactación automática evalúa el estado de la partición después de cada operación de escritura. Cuando detecta una fragmentación excesiva de archivos (demasiados archivos pequeños) dentro de una partición, desencadena una operación sincrónica OPTIMIZE inmediatamente después de confirmar la escritura. Este enfoque controlado por el sistema de escritura para el mantenimiento de archivos es óptimo porque la compactación solo se ejecuta cuando se determina mediante programación que es beneficioso.

Habilitar en el nivel de sesión

Establezca spark.databricks.delta.autoCompact.enabled en el nivel de sesión para habilitar la compactación automática para las nuevas tablas creadas en esa sesión de Spark:

SET spark.databricks.delta.autoCompact.enabled = TRUE

Habilitar en el nivel de tabla

Establezca la propiedad de tabla delta.autoOptimize.autoCompact para habilitar la compactación automática en tablas específicas:

CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Use la opción delta.autoOptimize.autoCompact DataFrameWriter para habilitar la compactación automática al crear una tabla:

df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')

Habilite la misma propiedad de tabla en una tabla existente:

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Ajuste de los umbrales de compactación automática

Ajuste el comportamiento de compactación automática estableciendo estas configuraciones de sesión de Spark:

Propiedad Description Valor predeterminado Configuración de sesión
maxFileSize Tamaño máximo de archivo de destino en bytes para archivos compactos. 134217728b (128 MB) spark.databricks.delta.autoCompact.maxFileSize
minFileSize Tamaño mínimo de archivo en bytes para un archivo que se va a considerar compacto. Todo lo que esté por debajo de este umbral se considera para la compactación y se cuenta hacia el minNumFiles umbral. No configurado por defecto, se calcula como 1/2 del maxFileSize a menos que establezca explícitamente un valor. spark.databricks.delta.autoCompact.minFileSize
minNumFiles El número mínimo de archivos que deben existir bajo el minFileSize umbral para que se desencadene la compactación automática. 50 spark.databricks.delta.autoCompact.minNumFiles

Elección entre la compactación automática y la optimización programada

Microsoft recomienda la compactación automática como estrategia predeterminada para la mayoría de los procesos de ingesta. Normalmente supera las programaciones fijas y reduce la sobrecarga operativa del mantenimiento OPTIMIZE de los trabajos.

Si los objetivos de latencia son estrictos, tener un OPTIMIZE programado en un grupo independiente de Spark podría ser una mejor opción, ya que la compactación automática se realiza de manera sincrónica después de las escrituras.

Use la compactación junto con características de prevención de archivos pequeños, como optimizar la escritura. Para obtener instrucciones, consulte Optimización de la escritura.

Mantenimiento de tablas de almacén de lago

Puede ejecutar operaciones de mantenimiento ad hoc como OPTIMIZE desde Lakehouse Explorer. Para obtener más información, consulte Mantenimiento de tablas de Lakehouse.

Resumen de los procedimientos recomendados

Use estas recomendaciones para equilibrar el costo de escritura, el rendimiento de lectura y la sobrecarga de mantenimiento para la compactación de tablas Delta.

  • Habilite la compactación automática para canalizaciones de ingesta con escrituras pequeñas frecuentes (streaming o microbatch) para reducir la programación manual.
  • Use la compactación automática de forma selectiva para otros patrones de escritura cuando los objetivos de nivel de servicio pueden tolerar picos ocasionales de latencia de escritura.
  • Programe la tabla OPTIMIZE completa durante las ventanas silenciosas cuando necesite reescribir muchas particiones o aplicar el orden Z.
  • Habilite la optimización rápida para reducir la amplificación de escritura y hacer OPTIMIZE más idempotente.
  • Habilite los destinos de compactación de nivel de archivo para reducir la recompacción innecesaria a medida que los tamaños de archivo de destino aumentan con el tiempo.
  • Utilice la optimización de escritura en rutas de ingesta adecuadas porque la compactación previa a la escritura suele ser menos costosa que la compactación posterior a la escritura. Para obtener instrucciones, consulte Optimización de la escritura.