Índices de filtros de Bloom
Nota
Al usar un proceso habilitado para Photon y Databricks Runtime 12.2 o versiones posteriores, la E/S predictiva supera a los filtros bloom en rendimiento de lectura. Consulte ¿Qué es la E/S predictiva?.
Tanto en Databricks Runtime 13.3 como en las versiones posteriores, Databricks recomienda usar la agrupación en clústeres para el diseño de tabla Delta. Consulte Uso de clústeres líquidos para tablas Delta.
Databricks solo recomienda usar filtros bloom al usar el proceso que no admite estas características.
Un índice de filtro de Bloom es una estructura de datos de ahorro de espacio que permite omitir datos de las columnas elegidas, especialmente para los campos que contienen texto arbitrario.
Los índices de filtro Bloom de Azure Databricks constan de un índice de omisión de datos para cada archivo de datos. El índice de filtro Bloom puede usarse para determinar que un valor de columna definitivamente no está en el archivo, o que probablemente está en el archivo. Antes de leer un archivo Azure Databricks comprueba el archivo de índice y el archivo se lee solo si el índice indica que el archivo puede coincidir con un filtro de datos.
Los filtros de Bloom admiten columnas con los siguientes tipos de datos de entrada: byte
, short
, int
, long
, float
, double
, date
, timestamp
y string
. No se agregan valores NULL al filtro de Bloom, por lo que cualquier filtro relacionado con valores NULL requiere leer el archivo de datos. Azure Databricks admite los siguientes filtros de origen de datos: and
, or
, in
equals
y equalsnullsafe
. No se admiten filtros de Bloom en columnas anidadas.
Use la sintaxis siguiente para habilitar un filtro Bloom:
CREATE BLOOMFILTER INDEX
ON TABLE table_name
FOR COLUMNS(column_name OPTIONS (fpp=0.1, numItems=5000))
Para conocer los detalles de la sintaxis, consulte CREAR ÍNDICE DE FILTRO BLOOM y ANULAR ÍNDICE DE FILTRO BLOOM.
Para deshabilitar las operaciones de filtro Bloom, establezca la configuración de spark.databricks.io.skipping.bloomFilter.enabled
del nivel de sesión en false
.
Para mostrar la lista de índices, ejecute:
spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))
Por ejemplo: