Compartilhar via


Índices do Filtro de Bloom

Um índice de filtro Bloom é uma estrutura de dados eficiente em termos de espaço que permite pular dados em colunas escolhidas. Ele é especialmente eficaz para colunas com muitos valores distintos, como texto de forma livre ou IDs.

Limitações dos índices de filtro Bloom

Important

O Azure Databricks não recomenda o uso de índices de filtro Bloom para a maioria das cargas de trabalho.

Embora os índices de filtro Bloom ofereçam suporte ao salto de dados em colunas com alta cardinalidade de valores únicos, eles geralmente ocasionam problemas como os seguintes:

  • Eles só indexam arquivos gravados depois que o índice é criado. Os índices não se aplicam aos arquivos existentes.
  • Eles são difíceis de ajustar e geralmente adicionam sobrecarga sem um benefício de desempenho significativo.
  • Eles funcionam melhor com filtros de igualdade altamente seletivos em uma única coluna. Eles fornecem pouco ou nenhum benefício para filtros mais amplos.
  • Os índices de filtro Bloom funcionam apenas em colunas definidas explicitamente. Se suas consultas começarem a filtrar colunas que não se sobrepõem às colunas de índice do filtro Bloom, você deverá remover e recriar manualmente o índice, adicionando sobrecarga operacional. Você também precisa recompilar o novo índice do zero com os novos dados.

Embora os índices de filtro Bloom pretendam ignorar as leituras de arquivo, o Azure Databricks ainda deve escanear o arquivo de índice para cada arquivo de dados. A ordenação Z e o clustering líquido são mais eficazes porque permitem que o mecanismo evite considerar a maioria dos arquivos.

O Azure Databricks recomenda usar os seguintes recursos em vez de índices de filtro Bloom:

  • E/S preditiva – Na computação habilitada para Foton com o Databricks Runtime 12.2 e posteriores, a E/S preditiva executa o salto de arquivo em todas as colunas usando heurística avançada. Ele subsume totalmente os índices de filtro Bloom, que só adicionam sobrecarga de gravação quando o Photon está habilitado.
  • Clustering líquido No Databricks Runtime 13.3 e superior, o clustering líquido melhora o salto de dados organizando-os com base em colunas frequentemente filtradas. Ele funciona em uma granularidade mais grosseira do que os índices de filtro Bloom e permite que o Azure Databricks ignore grupos inteiros de arquivos durante o planejamento de consultas.

Important

Evite combinar índices de filtro Bloom com E/S preditiva. Quando ambos estão habilitados, os índices de filtro Bloom têm precedência e desabilitam a E/S preditiva, o que proporciona um desempenho mais rápido e confiável.

Como funcionam os índices de filtro Bloom

Os índices de filtros Bloom do Azure Databricks consistem em um índice de descarte de dados para cada arquivo de dados. O índice de filtro Bloom pode ser usado para determinar se um valor de coluna não está definitivamente no arquivo ou que provavelmente está no arquivo. Antes de ler um arquivo, o Azure Databricks verifica o arquivo de índice e o arquivo é lido somente se o índice indicar que o arquivo pode corresponder a um filtro de dados.

Os índices de filtro Bloom dão suporte a colunas com os seguintes tipos de dados de entrada: byte, , short, int, long, float, double, , date, timestampe string. Os nulos não são adicionados ao índice de filtro Bloom, portanto, qualquer filtro relacionado nulo requer a leitura do arquivo de dados. O Azure Databricks dá suporte aos seguintes filtros de fonte de dados: and, , or, in, e equalsequalsnullsafe. Não há suporte para índices de filtro bloom em colunas aninhadas.

Configuração e referência

Use a seguinte sintaxe para habilitar um filtro Bloom:

CREATE BLOOMFILTER INDEX
ON TABLE table_name
FOR COLUMNS(column_name OPTIONS (fpp=0.1, numItems=5000))

Para obter detalhes de sintaxe, consulte CREATE BLOOM FILTER INDEX e DROP BLOOM FILTER INDEX.

Para desabilitar as operações de filtro Bloom, defina a configuração de spark.databricks.io.skipping.bloomFilter.enabled no nível de sessão como false.

Exibir a lista de índices de Filtro Bloom

Para exibir a lista de índices, execute:

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

Por exemplo:

Mostrar índices