Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 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.
| 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 (1 GB) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Tamaño del archivo de destino generado por el OPTIMIZE comando . |
1073741824 (1 GB) | 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, un archivo de 900 MB podría volver a escribirse 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. El diseño colocado 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
Puede combinar Z-Order y V-Order en un solo comando. Spark aplica las operaciones en este orden: compactación de bins → Z-Order → V-Order.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
El comportamiento del orden V durante OPTIMIZE depende de cómo invoque el comando:
| Invocación | Comportamiento |
|---|---|
OPTIMIZE table VORDER |
Fuerza el orden V en los archivos reescritos, independientemente de la configuración de la sesión o de la tabla. |
OPTIMIZE table (sin VORDER palabra clave) |
Hereda el comportamiento de V-Order de TBLPROPERTIES("delta.parquet.vorder.enabled") si está establecido; de lo contrario, recurre a la configuración de sesión spark.sql.parquet.vorder.default. |
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.
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. Aumente el valor para que la optimización rápida sea más conservadora al omitir intervalos, o reduzca el valor para permitir una omisión de intervalos más permisiva.
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 compacta solo los contenedores que probablemente alcancen el tamaño de destino mínimo o superen 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.
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.
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.
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:
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')
Reducción de la sobrecarga de evaluación
A partir del entorno de ejecución de Spark de Fabric 2.0 (Delta 4.1), puede habilitar el modo de compactación automática de onCheckpointOnly. De forma predeterminada, la compactación automática evalúa los metadatos de archivo después de cada operación de escritura para determinar si una tabla tiene demasiados archivos pequeños. Con onCheckpointOnly, la evaluación se aplaza para registrar operaciones de punto de comprobación (normalmente cada 10 confirmaciones). En el momento del punto de comprobación, la instantánea de tabla ya está totalmente reconstruyida, por lo que la evaluación lee los metadatos que ya están en memoria en lugar de requerir un examen adicional. La evaluación diferida reduce la sobrecarga en cada confirmación y aun así garantiza que las tablas se compactan periódicamente.