Indici del filtro Bloom

Un indice di filtro Bloom è una struttura di dati efficiente nello spazio che consente di ignorare i dati sulle colonne scelte, in particolare per i campi contenenti testo arbitrario.

Funzionamento degli indici di filtro Bloom

Il filtro Bloom opera indicando che i dati non sono definitivamente presenti nel file o che probabilmente si trovano nel file, con una probabilità false positiva definita (FPP).

Azure Databricks supporta i filtri Bloom a livello di file; ogni file di dati può avere un singolo file di indice di filtro Bloom associato. Prima di leggere un file di Azure Databricks controlla il file di indice e il file viene letto solo se l'indice indica che il file potrebbe corrispondere a un filtro dati. Azure Databricks legge sempre il file di dati se un indice non esiste o se un filtro Bloom non è definito per una colonna query.

Le dimensioni di un filtro Bloom dipendono dagli elementi numerici del set per il quale è stato creato il filtro Bloom e il FPP richiesto. Più basso il FPP, maggiore è il numero di bit usati per elemento e più accurato sarà, a costo di più spazio su disco e download più lente. Ad esempio, un FPP pari al 10% richiede 5 bit per elemento.

Un indice filtro Bloom è un file Parquet non compresso che contiene una singola riga. Gli indici vengono archiviati nella _delta_index sottodirectory rispetto al file di dati e usano lo stesso nome del file di dati con il suffisso index.v1.parquet. Ad esempio, l'indice per il file dbfs:/db1/data.0001.parquet.snappy di dati sarà denominato dbfs:/db1/_delta_index/data.0001.parquet.snappy.index.v1.parquet.

I filtri Bloom supportano le colonne con i tipi di dati seguenti (byteinput): , floatdoubleshortlongdateinttimestampe .string I valori Null non vengono aggiunti al filtro Bloom, pertanto qualsiasi filtro correlato a Null richiede la lettura del file di dati. Azure Databricks supporta i filtri dell'origine dati seguenti: and, orin, , equalse equalsnullsafe. I filtri bloom non sono supportati nelle colonne annidate.

Configurazione e riferimento

I filtri Bloom sono abilitati per impostazione predefinita. Per disabilitare i filtri Bloom, impostare la configurazione a livello spark.databricks.io.skipping.bloomFilter.enabled di sessione su false.

Visualizzare l'elenco degli indici del filtro Bloom

Per visualizzare l'elenco di indici, eseguire:

spark.table("<table-with-indexes>").schema.foreach(field => println(s"${field.name}: metadata=${field.metadata}"))

Ad esempio:

Mostra indici

Notebook

Il notebook seguente illustra come definire un indice di filtro Bloom accelera le query "ago in un haystack".

Notebook demo del filtro Bloom

Ottenere il notebook