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.
Omitir archivos es una optimización de lectura de Delta Lake que permite al motor Spark evitar analizar archivos de datos que no pueden contener filas que coincidan. Dado que el motor lee menos datos, las consultas se ejecutan más rápido y consumen menos recursos de E/S.
Funcionamiento de la omisión de archivos
Cada vez que se escribe un archivo de datos en una tabla Delta, Delta Lake registra estadísticas de columnas por archivo en el registro de transacciones. Estas estadísticas incluyen el valor mínimo, el valor máximo y el recuento nulo para cada columna indizada de ese archivo.
Cuando una consulta incluye un predicado de filtro, el motor compara el valor del predicado con el intervalo mínimo/máximo almacenado para cada archivo. Si el valor del predicado está fuera del intervalo de un archivo, ese archivo se omite completamente, no es necesario abrirlo ni examinarlo.
Por ejemplo, considere una sales tabla con particiones en cinco archivos de datos por intervalos de fechas:
| Archivo | Estadísticas mínimas/máximas | Resultado de WHERE date = '2024-03-15' |
|---|---|---|
| Archivo 1 | date [2024-01-01 .. 2024-02-28] |
Omitido |
| Archivo 2 | date [2024-03-01 .. 2024-03-31] |
Leer ✓ |
| Archivo 3 | date [2024-04-01 .. 2024-05-31] |
Omitido |
| Archivo 4 | date [2024-06-01 .. 2024-07-31] |
Omitido |
| Archivo 5 | date [2024-08-01 .. 2024-09-30] |
Omitido |
En este caso, se omiten cuatro de cinco archivos (80% menos datos examinados), ya que sus intervalos mínimo/máximo no se superponen con el valor de filtro.
Importante
El tipo de datos del valor de predicado debe coincidir con el tipo de columna. Una incompatibilidad de tipos puede impedir que el motor use estadísticas a nivel de archivo para omitir datos.
Comportamiento predeterminado
Delta Lake recopila estadísticas de archivos automáticamente con los valores predeterminados siguientes:
- Solo las primeras 32 columnas (por posición ordinal) tienen estadísticas recopiladas.
- Estadísticas de las que se realiza un seguimiento por columna por archivo: recuento mínimo, máximo y nulo
- La recopilación de estadísticas en columnas de cadena largas es costosa y agrega sobrecarga de escritura, por lo que el posicionamiento es importante.
La propiedad delta.dataSkippingNumIndexedCols de tabla controla el límite de columnas. Las columnas que superan ese umbral no disponen de estadísticas a nivel de archivo y no pueden beneficiarse de la omisión de archivos.
Tipos de datos aptos
No todos los tipos de columna admiten estadísticas de nivel de archivo y, por tanto, la omisión de archivos. El motor evalúa el tipo de datos de cada columna para determinar si se pueden recopilar estadísticas mínimas o máximas.
Siempre admisible (tipos atómicos)
-
NumericType(ByteType,ShortType,IntegerType,LongType,FloatType,DoubleType, )DecimalType DateTypeTimestampTypeTimestampNTZTypeStringType
Apto condicionalmente
Note
Los siguientes tipos se pueden habilitar a partir de Fabric Spark Runtime 2.0 (Delta 4.1)
-
VariantType: cuandospark.databricks.delta.variantShredding.collectVariantDataSkippingStatsestá habilitado. -
ArrayType: cuandospark.microsoft.delta.skipping.complexTypes.enabledestá habilitado y el tipo de elemento es apto. -
MapType: cuandospark.microsoft.delta.skipping.complexTypes.enabledestá habilitado y los tipos de clave y valor son aptos.
No elegible
BinaryTypeBooleanType-
StructType(en su conjunto: los campos hoja dentro de las estructuras se evalúan individualmente) NullType
Maximizar la cobertura de columnas
Para sacar el máximo provecho del salto de archivos, asegúrese de que las columnas por las que filtra con más frecuencia estén incluidas en las estadísticas de los archivos.
Colocar primero las columnas filtradas con frecuencia
Coloque las columnas que aparecen con más frecuencia en cláusulas WHERE, claves de unión y predicados de filtrado en las primeras 32 posiciones ordinales del esquema de la tabla. Mueva las columnas de cadenas largas o las columnas de baja selectividad más allá de la posición 32 para evitar el sobrecoste de escritura asociado a estadísticas que rara vez resultan útiles.
Aumentar el número de columnas indizadas
Si la tabla tiene más de 32 columnas que se benefician de las estadísticas, aumente el límite predeterminado:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols' = '40')
Note
Aumentar el número de columnas indexadas añade sobrecarga en la escritura para cada archivo de datos. Aumente este valor solo cuando las columnas adicionales se usen con frecuencia en predicados de filtro.
Especificación de columnas exactas para estadísticas
Use delta.dataSkippingStatsColumns para controlar explícitamente qué columnas obtienen estadísticas de archivo, independientemente de la posición ordinal:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingStatsColumns' = 'col1,col2')
Cuando delta.dataSkippingStatsColumns se establece, solo las columnas especificadas obtienen estadísticas recopiladas. Este enfoque proporciona un control específico sobre el equilibrio entre el costo de escritura y la ventaja de lectura.
Combine la omisión de archivos con la disposición de los datos
Omitir archivos funciona mejor cuando los valores relacionados están ubicados en los mismos archivos. Técnicas como ZORDER BY y agrupación en clústeres líquidos reorganizan físicamente los datos para que las filas con valores de columna similares terminen en los mismos archivos. La colocación de valores similares ajusta los intervalos min/max por archivo, lo que aumenta el porcentaje de archivos que el motor puede omitir para un filtro determinado.
Para obtener más información sobre la optimización del diseño de datos, consulte Compactación de tablas, Agrupación en clústeres líquidos y Orden Z.