Compartir a través de


Ajuste del tamaño de los archivos de datos de la tabla Delta

Los archivos de tamaño adecuado son importantes para el rendimiento de las consultas, el uso de recursos y la administración de metadatos. Los archivos más pequeños incrementan la sobrecarga y las operaciones de metadatos de las tareas, mientras que los archivos más grandes pueden infrautilizar el paralelismo y desequilibrar la E/S. Delta Lake utiliza metadatos de archivo para el recorte de particiones y el salto de datos, por lo que garantizar el tamaño de archivo adecuado asegura lecturas, escrituras y mantenimiento eficaces.

En la sección siguiente se muestra cómo usar varias características de ajuste de tamaño de archivo diferentes para lograr el rendimiento de las tablas Delta.

Operaciones de diseño de datos ajustables

Optimize

El OPTIMIZE comando vuelve a escribir archivos pequeños como archivos más grandes para mejorar el diseño de los datos en tablas Delta. Para obtener más detalles, incluida la información de optimización del tamaño de archivo, revise la documentación del comando OPTIMIZE .

Compactación automática

Auto Compaction evalúa automáticamente 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 suele ser óptimo porque la compactación solo se ejecuta cuando se determina mediante programación que es beneficioso. Para obtener opciones de configuración detalladas e información adicional, consulte la documentación de compactación automática .

Optimización de la escritura

Optimización de la escritura reduce la sobrecarga de archivos pequeños mediante la compactación previa a la escritura (empaquetado de binarios), generando menos, pero más grandes archivos. Este enfoque ordena los datos en memoria en contenedores de tamaño óptimo antes de que Spark escriba los archivos Parquet, maximizando el potencial de generar archivos de tamaño adecuado sin necesidad de operaciones inmediatas de limpieza posteriores a la escritura.

La optimización de escritura debe usarse con precaución, ya que el costo computacional de reorganizar datos puede agregar un tiempo de procesamiento excesivo e innecesario en escenarios de escritura específicos. Optimizar la escritura es beneficioso cuando una operación de escritura produciría archivos pequeños que serían candidatos para la compactación más adelante.

Captura de pantalla que muestra cómo optimizar la escritura produce menos archivos que se escriben.

La optimización de la escritura suele ser beneficiosa para:

  • Tablas con particiones
  • Tablas con inserciones de datos pequeñas y frecuentes
  • Operaciones que probablemente toquen muchos archivos (MERGE, UPDATEy DELETE)

Para la aplicación selectiva en tablas específicas, desactive la configuración de sesión y habilite individualmente la propiedad de la tabla. El restablecimiento de la configuración a nivel de sesión permite que las sesiones de Spark deleguen en cada tabla la decisión de si se debe aplicar la optimización de escritura.

  1. Desactivar optimización de escritura

    spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")
    
  2. Habilitar en una tabla individual

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

Para habilitar escrituras en todas las tablas con particiones de la sesión de Spark, asegúrese de que la configuración de la sesión no está activada y, a continuación, habilite la configuración de la sesión spark.microsoft.delta.optimizeWrite.partitioned.enabled:

SET spark.microsoft.delta.optimizeWrite.partitioned.enabled = TRUE

El tamaño del archivo de destino generado a partir de la escritura optimizada se puede ajustar a través de la spark.databricks.delta.optimizeWrite.binSize configuración.

Nota:

Consulte perfiles de recursos para la configuración de optimización predeterminada de escritura por perfil de recursos.

Establecer de forma coherente el tamaño del archivo de destino

Para evitar la necesidad de establecer configuraciones de sesión para los tamaños mínimo y máximo del archivo de destino al optimizar, realizar la compactación automática y mejorar la escritura, Microsoft Fabric proporciona la propiedad de tabla delta.targetFileSize como un medio para unificar todas las configuraciones de diseño de datos relacionadas a nivel de tabla. El valor de tamaño del archivo de destino se escribe como una cadena de bytes (por ejemplo, 1073741824b, 1048576k, 1024m, 1g). Cuando se especifica, tiene prioridad sobre todas las demás configuraciones de sesión y el tamaño del archivo de destino adaptable.

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.targetFileSize' = '256m')

Tamaño del archivo de destino adaptable

Microsoft Fabric proporciona un tamaño de archivo de destino adaptable para eliminar la complejidad relacionada con el ajuste manual del tamaño de archivo de destino de todas las tablas de una sesión o tablas individuales a través de la propiedad de tabla delta.targetFileSize. El tamaño del archivo de destino adaptable usa heurística de tabla delta, como el tamaño de tabla, para calcular el tamaño de archivo de destino ideal y actualiza automáticamente el destino a medida que cambian las condiciones, lo que garantiza un rendimiento óptimo sin intervención manual ni sobrecarga de mantenimiento.

Nota:

Aunque actualmente no está habilitado de forma predeterminada, Microsoft recomienda habilitar la configuración de la sesión de tamaño de archivo de destino adaptable .

Habilite el tamaño del archivo de destino adaptable en tablas creadas o modificadas dentro de una sesión de Spark estableciendo la siguiente configuración de sesión de Spark:

SET spark.microsoft.delta.targetFileSize.adaptive.enabled = TRUE

Cuando se habilita, el tamaño del archivo de destino adaptable se evalúa y establece en los escenarios siguientes:

  • operaciones CREATE TABLE AS SELECT y CREATE OR REPLACE TABLE AS SELECT
  • Sobrescribir operaciones de escritura (por ejemplo, DataFrame.write.mode("overwrite") o INSERT OVERWRITE)
  • Escribe en el modo ErrorIfExists, Append o Ignore al crear una nueva tabla.
  • Al principio del comando OPTIMIZE

Una vez establecido, el tamaño ideal continúa reevaluando al principio de cada OPTIMIZE operación para asegurarse de que la heurística actual refleje la distribución de datos más reciente y el crecimiento de la tabla. Este enfoque adaptable actualiza automáticamente el tamaño del archivo de destino a lo largo del tiempo, lo que elimina la necesidad de optimizar manualmente mientras conserva el rendimiento de las consultas y escritura a medida que crecen los datos. Cuando necesite bloquear un tamaño específico, como en casos de uso de ajuste hiperfino o pruebas, puede anular la configuración adaptativa estableciendo explícitamente la propiedad de tabla definida por el usuario delta.targetFileSize.

El valor de tamaño de archivo de destino adaptable evaluado se puede auditar ejecutando DESCRIBE DETAIL o DESCRIBE EXTENDED en la tabla. El tamaño adaptable evaluado se almacena como una cadena de bytes en la propiedad de la tabla delta.targetFileSize.adaptive. Este valor se usa como la configuración de tamaño máximo o de destino para optimizar, compactar automáticamente y optimizar la escritura. El valor mínimo usado por las configuraciones relacionadas se calcula como la mitad de delta.targetFileSize.adaptive.

El tamaño del archivo de destino adaptable se puede configurar aún más a través de las siguientes configuraciones de sesión de Spark:

Propiedad Description Valor predeterminado Configuración de sesión
minFileSize Especifica el tamaño mínimo de archivo (límite inferior) como una cadena de bytes que usa el tamaño de archivo de destino adaptable cuando se evalúa. Debe tener entre 128 MB y 1 GB. 128 m spark.microsoft.delta.targetFileSize.adaptive.minFileSize
maxFileSize Especifica el tamaño máximo del archivo (límite superior) como una cadena de bytes que utiliza Adaptive Target File Size al evaluarse. Debe tener entre 128 MB y 1 GB. 1024m spark.microsoft.delta.targetFileSize.adaptive.maxFileSize
stopAtMaxSize Cuando true, detiene las futuras evaluaciones de tamaño una vez que el tamaño de archivo de destino calculado alcanza maxFileSize, lo que reduce cualquier sobrecarga de evaluación en tablas muy grandes. true spark.microsoft.delta.targetFileSize.adaptive.stopAtMaxSize

Nota:

Con stopAtMaxSize habilitado (valor predeterminado), el tamaño de destino adaptable permanece fijo en el valor máximo una vez alcanzado, evitando cálculos adicionales. Si las tablas pueden reducirse después de crecer, establezca esta propiedad en false para permitir el recálculo por debajo del umbral máximo.

En el gráfico siguiente se muestra la relación entre el tamaño de tabla y el tamaño óptimo del archivo de parquet. Para las tablas inferiores a 10 GB, Fabric Spark Runtime evalúa el tamaño del archivo de destino para que sea de 128 MB. A medida que crece el tamaño de la tabla, el tamaño del archivo de destino se escala linealmente y alcanza hasta 1 GB para las tablas que superan los 10 TB.

Gráfico que ilustra la relación entre el tamaño de tabla y el tamaño óptimo del archivo parquet.

Comenzando con archivos pequeños de 128 MB y luego escalando el tamaño de los archivos parquet a medida que una tabla crece en tamaño tiene beneficios acumulativos:

  • Se ha mejorado la omisión de archivos Delta: los archivos de tamaño correcto admiten la agrupación en clústeres de datos óptimos y la omisión, lo que permite que el protocolo de omisión de archivos de Delta elimine archivos más irrelevantes durante la ejecución de consultas. Una pequeña tabla con archivos de 128 MB en lugar de archivos de 1 GB permite omitir 8 archivos más posibles.

  • Costos de actualización reducidos: MERGE y UPDATE las operaciones solo vuelven a escribir los archivos afectados. Los archivos de tamaño adecuado minimizan el número de archivos afectados por operación, lo que reduce la cantidad de datos reescritos. Con los vectores de eliminación habilitados, el ajuste de tamaño adecuado de los archivos se convierte en fundamental: las lápidas de nivel de fila de los archivos sobredimensionados generan costos de limpieza significativos durante las operaciones de compactación o purga.

  • Paralelismo optimizado: los archivos de tamaño correcto permiten a Spark lograr paralelismo de tareas ideal. Demasiados archivos pequeños sobrecargan el planificador; demasiado pocos archivos grandes infrautilizan el grupo de Spark. El ajuste de tamaño óptimo maximiza el rendimiento de lectura y escritura.

El tamaño del archivo de destino adaptable puede mejorar el rendimiento de la compactación entre 30 y 60% y ofrecer consultas y escrituras más rápidas cuando selecciona un tamaño de archivo más óptimo que el predeterminado. Si la evaluación adaptable produce el mismo tamaño que la configuración predeterminada de la sesión de Spark, no se espera ninguna mejora del rendimiento.

Importante

Para evitar la amplificación de escritura ( donde los archivos ya compactos se reescriben cuando el tamaño del archivo de destino adaptable aumenta a medida que crece la tabla), habilite los destinos de compactación de nivel de archivo. Esta característica impide que los archivos compactados con tamaños de destino adaptables anteriores se vuelvan a compactar innecesariamente. Para obtener más información, consulte la documentación sobre los destinos de compactación de nivel de archivo.

Resumen de los procedimientos recomendados

  • Habilite la compactación automática para canalizaciones de ingesta con escrituras pequeñas frecuentes (streaming o micro-lotes) para evitar la programación manual y mantener los archivos compactos automáticamente.
    • Para otros patrones de escritura, puede ser beneficioso habilitarlo como una precaución contra la acumulación de archivos pequeños, pero debes considerar si los objetivos de nivel de servicio de tu procesamiento de datos toleran picos periódicos en el tiempo de procesamiento.
  • Habilite el tamaño del archivo de destino adaptable para quitar las estimaciones en torno a los tamaños óptimos de archivo de destino.
  • Use Optimize Write en rutas de ingesta controladas (trabajos por lotes que pueden tolerar una reorganización de datos, escenarios de particionamiento o frecuentes escrituras pequeñas) para reducir la creación de archivos pequeños y los costos de mantenimiento posteriores. La compactación previa a la escritura (optimizar la escritura) tiende a ser menos costosa que la compactación posterior a la escritura (optimizar).
  • Programe operaciones de tabla OPTIMIZE completa durante las ventanas silenciosas cuando deba reescribir muchas particiones o ejecutar Z-Order.
  • Habilite la optimización rápida para minimizar la amplificación de escritura y hacer que OPTIMIZE sea más idempotente (consulte optimización rápida).
  • Use delta.targetFileSize o preferiblemente el tamaño del archivo de destino adaptable para mantener los valores de tamaño de archivo de destino coherentes entre las características de diseño de datos y las sesiones de Spark.
  • Habilite los destinos de compactación de nivel de archivo para evitar la amplificación de escritura a medida que las tablas aumentan de tamaño y usan tamaños de archivo de destino mayores.