---
metadata:
  - name: generator
    content: Diplodoc Platform v5.56.0
alternate:
  - https://ydb.tech/docs/en/yql/reference/syntax/create_table/bloom_skip_index.md?version=main
  - https://ydb.tech/docs/ru/yql/reference/syntax/create_table/bloom_skip_index.md?version=main
  - href: ru/yql/reference/syntax/create_table/bloom_skip_index.md
    type: text/markdown
    title: Markdown version
  - href: ../../../../llms.txt
    type: text/markdown
    title: llms.txt
sourcePath: ru/core/yql/reference/syntax/create_table/bloom_skip_index.md
---
> **Documentation Index:** Fetch the complete configuration index at https://ydb.tech/docs/ru/llms.txt

# Блум-индекс

[Блум-индексы](https://ydb.tech/docs/ru/dev/bloom-skip-indexes.md?version=main) — [локальные индексы](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#local-index), их можно задать только с ключевым словом `LOCAL`. При создании таблицы в секции `INDEX` используются типы `bloom_filter` или `bloom_ngram_filter` (по аналогии с [вторичным индексом](https://ydb.tech/docs/ru/yql/reference/syntax/create_table/secondary_index.md?version=main), но с обязательным `LOCAL` и соответствующим `USING`). См. также [локальные индексы](https://ydb.tech/docs/ru/concepts/query_execution/local_indexes.md?version=main).

```yql
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>` — список колонок, по которым строится индекс; количество колонок зависит от типа таблицы и типа индекса. На [строковых таблицах](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#row-oriented-table) индексируемые колонки `bloom_filter` должны образовывать левый префикс [первичного ключа](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#primary-key).
* Для Блум-индексов не поддерживаются колонки покрытия (`COVER (...)`).

Параметры `WITH (...)`:

<!-- source: ru/yql/reference/syntax/_includes/bloom_skip_index_parameters.md -->
* `bloom_filter`
  * `false_positive_probability` — целевая [вероятность ложноположительного срабатывания](https://ru.wikipedia.org/wiki/Фильтр_Блума#Вероятность_ложных_срабатываний) фильтра: доля фрагментов, которые фильтр не отсечёт, хотя искомого значения в них нет (диапазон `(0, 1)`). Меньшее значение уменьшает число лишних чтений, но увеличивает размер индекса.
    * Если параметр не указан, для [строковых таблиц](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#row-oriented-table) используется `0.0001`, для [колоночных](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#column-oriented-table) — `0.1`. Более строгий порог по умолчанию в строковых таблицах соответствует OLTP-сценарию точечных чтений; в колоночных — аналитическим сканам, где допустим больший компромисс между размером индекса и отсечением фрагментов.
  * Индексируемые колонки — типы YQL, для которых определено сравнение на равенство, кроме `Yson`, `Json` и `JsonDocument` (см. [операторы сравнения](https://ydb.tech/docs/ru/yql/reference/syntax/expressions.md?version=main#comparison-operators)). В колоночной таблице допускается одна колонка; в строковой — несколько. На строковых таблицах индексируемые колонки должны образовывать левый префикс [первичного ключа](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#primary-key).
* `bloom_ngram_filter` (колонки `String`, `Utf8`; только [колоночные таблицы](https://ydb.tech/docs/ru/concepts/glossary.md?version=main#column-oriented-table))
  * `ngram_size` — размер n-граммы, целое число от `3` до `8` (по умолчанию `3`).
  * `false_positive_probability` — целевая [вероятность ложноположительного срабатывания](https://ru.wikipedia.org/wiki/Фильтр_Блума#Вероятность_ложных_срабатываний) (диапазон `(0, 1)`; по умолчанию `0.1`).
  * `case_sensitive` — учёт регистра при построении n-грамм: `true` или `false` (по умолчанию `true`).
<!-- endsource: ru/yql/reference/syntax/_includes/bloom_skip_index_parameters.md -->

Создание и изменение таких индексов для уже существующей таблицы описаны в разделе [`ALTER TABLE ADD INDEX`](https://ydb.tech/docs/ru/yql/reference/syntax/alter_table/indexes.md?version=main#local-bloom).

## Примеры

### Индекс `bloom_filter`

```yql
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`

```yql
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
        )
);
```
