Eliminación dinámica de archivos

Cuando una consulta une una tabla Delta Lake grande a una tabla filtrada más pequeña, los valores del filtro no se conocen hasta que se ejecuta la consulta. Sin poda en tiempo de ejecución, la consulta escanea todos los archivos de la tabla grande, incluso los que no contienen filas coincidentes. La poda dinámica de archivos resuelve este problema. En tiempo de ejecución, el optimizador empuja los resultados del filtro desde un lado de la unión hasta el escaneo de la tabla Delta Lake y omite archivos que no pueden contener filas coincidentes.

La poda dinámica de archivos está habilitada por defecto. No necesitas cambiar tus consultas para beneficiarte de ello.

Cuando se aplica la poda dinámica de archivos

La poda dinámica de archivos solo se aplica a uniones en tablas Delta Lake. En una instrucción MERGE, usa los valores de la clave de combinación del origen para omitir archivos de destino cuando la condición de combinación compara una columna de origen con una columna de destino para comprobar su igualdad. En las sentencias UPDATE y DELETE, se aplica cuando la condición contiene una subconsulta que realiza el mismo tipo de comparación.

La poda dinámica de archivos en las sentencias MERGE, UPDATE y DELETE requiere cómputo con Photon habilitado. Para las SELECT sentencias, Photon tiene una poda dinámica de archivos más amplia y fiable. Sin Photon, es posible que la eliminación dinámica de archivos se siga aplicando a las instrucciones SELECT, según la forma de la consulta y el plan de ejecución. Consulte ¿Qué es Photon?

La poda dinámica de archivos mejora el rendimiento principalmente para tablas no particionadas y para uniones en columnas no particionadas. Por defecto, solo se activa cuando la tabla grande Delta Lake en la join tiene al menos 10 GB y al menos 10 archivos. Consulte Configuración.

La poda dinámica de archivos también reduce los conflictos de escritura. Cuando Delta Lake comprueba si hay conflictos durante una confirmación, tiene en cuenta los archivos que omitió la eliminación dinámica de archivos. Esto reduce el número de transacciones fallidas. Ver Niveles de aislamiento y conflictos de escritura.

Prácticas recomendadas

El efecto en rendimiento de la poda dinámica de archivos se correlaciona con cómo se agrupan los datos. Si los valores por los que se combina están repartidos por todos los archivos, la eliminación dinámica de archivos omite pocos archivos. Para ayudar a que la poda dinámica de archivos omita más archivos, sigue estas prácticas:

  • Use la agrupación en clústeres líquida en las columnas por las que combina con frecuencia, de modo que las filas coincidentes se ubiquen juntas en menos archivos.
  • Use proceso habilitado para Photon, que las instrucciones MERGE, UPDATE y DELETE requieren para la eliminación dinámica de archivos.

Configuración

La mayoría de las cargas de trabajo no necesitan cambiar estos ajustes. Considera ajustar los umbrales si una unión contra una tabla Delta Lake más pequeña se beneficiaría de la poda pero queda por debajo del umbral por defecto de tamaño o de número de archivos.

Estas propiedades de configuración de Apache Spark controlan la poda dinámica de archivos:

Property Type Predeterminado Description
spark.databricks.optimizer.dynamicFilePruning Boolean true Activa o desactiva la poda dinámica de archivos.
spark.databricks.optimizer.deltaTableSizeThreshold Long 10000000000 (10 GB) El tamaño mínimo, en bytes, de la tabla grande Delta Lake en la unión que activa la poda dinámica de archivos. Para una tabla pequeña, escanear toda la tabla suele ser más barato que aplicar los filtros en origen.
Para encontrar el tamaño de una tabla de Delta Lake, corre DESCRIBE DETAIL table_name y revisa la sizeInBytes columna.
spark.databricks.optimizer.deltaTableFilesThreshold Integer 10 El número mínimo de archivos en la tabla grande Delta Lake en la unión que desencadena la poda dinámica de archivos. Si la tabla tiene menos archivos que este umbral, la poda dinámica de archivos no se ejecuta, porque puede que no merezca la pena para una tabla con solo unos pocos archivos.
Para encontrar el número de archivos en una tabla de Delta Lake, ejecuta DESCRIBE DETAIL table_name y revisa la numFiles columna.