Поделиться через


Индексы Блум-фильтров

Заметка

При использовании вычислительных ресурсов с поддержкой Photon и Databricks Runtime 12.2 или более поздней версии прогнозирование ввода-вывода превосходит фильтры Блума по производительности чтения. См. Что такое прогнозный ввод-вывод?.

В Databricks Runtime 13.3 и более поздних версиях Databricks рекомендует использовать кластеризацию для макета таблицы Delta. См. Использование кластеризации жидкости для таблиц Delta.

Databricks рекомендует использовать фильтры Блум только при использовании вычислений, которые не поддерживают эти функции.

Индекс фильтра Блум — это эффективная в пространстве структура данных, которая позволяет пропускать данные по выбранным столбцам, особенно для полей, содержащих произвольный текст.

Как работают индексы фильтров Блум

Индексы фильтров Блум Azure Databricks состоят из индекса пропуска данных для каждого файла данных. Индекс фильтра Блума можно использовать для определения того, что значение в столбце точно не находится в файле или что оно , вероятно, находится в файле. Перед чтением файла Azure Databricks проверяет файл индекса, а файл считывается только в том случае, если индекс указывает, что файл может соответствовать фильтру данных.

Фильтры блум поддерживают столбцы со следующими входными типами данных: byte, short, int, long, float, double, date, timestampи string. Значения NULL не добавляются в фильтр Блума, поэтому чтение файла данных требуется при любом фильтре, связанном с null. Azure Databricks поддерживает следующие фильтры источников данных: and, or, in, equalsи equalsnullsafe. Фильтры Блума не поддерживаются в вложенных столбцах.

Конфигурация и справочные материалы

Используйте следующий синтаксис, чтобы включить фильтр Блума:

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

Сведения о синтаксисе см. в CREATE BLOOM FILTER INDEX и DROP BLOOM FILTER INDEX.

Чтобы отключить операции фильтра Блум, задайте конфигурацию уровня сеанса spark.databricks.io.skipping.bloomFilter.enabled на false.

Отображение списка индексов фильтров Блум

Чтобы отобразить список индексов, выполните следующую команду:

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

Например:

Показать индексы