Блум-индекс

Блум-индексылокальные индексы, их можно задать только с ключевым словом 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_filter
    • false_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
        )
);
Предыдущая
Следующая