Блум-индекс
Блум-индексы — локальные индексы, их можно задать только с ключевым словом LOCAL. При создании таблицы в секции INDEX используются типы bloom_filter или bloom_ngram_filter (по аналогии с вторичным индексом, но с обязательным LOCAL и соответствующим USING). См. также локальные индексы.
CREATE TABLE `<table_name>` (
...
INDEX `<index_name>`
LOCAL
USING bloom_filter | bloom_ngram_filter
ON ( <index_columns> )
[WITH ( <parameter_name> = <parameter_value>[, ...])]
[, ...]
)
Где:
<index_name>— имя индекса.LOCAL— обязательное ключевое слово для Блум-индексов.<index_columns>— список колонок, по которым строится индекс; количество колонок зависит от типа таблицы и типа индекса.- Для Блум-индексов не поддерживаются колонки покрытия (
COVER (...)).
Параметры WITH (...):
bloom_filterfalse_positive_probability— целевая вероятность ложноположительного срабатывания фильтра: доля фрагментов, которые фильтр не отсечёт, хотя искомого значения в них нет (диапазон(0, 1)). Меньшее значение уменьшает число лишних чтений, но увеличивает размер индекса.- Если параметр не указан, для строковых таблиц используется
0.0001, для колоночных —0.1. Более строгий порог по умолчанию в строковых таблицах соответствует OLTP-сценарию точечных чтений; в колоночных — аналитическим сканам, где допустим больший компромисс между размером индекса и отсечением фрагментов.
- Если параметр не указан, для строковых таблиц используется
- Индексируемые колонки — типы YQL, для которых определено сравнение на равенство, кроме
Yson,JsonиJsonDocument(см. операторы сравнения). В колоночной таблице допускается одна колонка; в строковой — несколько.
bloom_ngram_filter(колонкиString,Utf8; только колоночные таблицы)ngram_size— размер n-граммы, целое число от3до8(по умолчанию3).false_positive_probability— целевая вероятность ложноположительного срабатывания (диапазон(0, 1); по умолчанию0.1).case_sensitive— учёт регистра при построении n-грамм:trueилиfalse(по умолчаниюtrue).
Создание и изменение таких индексов для уже существующей таблицы описаны в разделе ALTER TABLE ADD INDEX.
Примеры
Индекс bloom_filter
CREATE TABLE events (
id Uint64,
resource_id Utf8,
PRIMARY KEY (id),
INDEX idx_bloom LOCAL USING bloom_filter
ON (resource_id)
WITH (false_positive_probability = 0.01)
);
Индекс bloom_ngram_filter
CREATE TABLE events (
id Uint64,
message Utf8,
PRIMARY KEY (id),
INDEX idx_ngram LOCAL USING bloom_ngram_filter
ON (message)
WITH (
ngram_size = 3,
false_positive_probability = 0.01,
case_sensitive = true
)
);
Была ли статья полезна?
Предыдущая
Следующая