> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-8c05c8a2.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Системная таблица со статистикой по выборкам фильтров и селективности индексов, собранной из конвейеров чтения `MergeTree` во время выполнения запроса.

# system.predicate_statistics_log

<Info>
  **Запросы в ClickHouse Cloud**

  Данные в этой системной таблице хранятся локально на каждом узле ClickHouse Cloud. Поэтому, чтобы получить полное представление обо всех данных, требуется функция `clusterAllReplicas`. Дополнительные сведения см. [здесь](/ru/reference/system-tables/overview#system-tables-in-clickhouse-cloud).
</Info>

<div id="description">
  ## Описание
</div>

Содержит статистику селективности по выборке, собранную при чтении из таблиц `MergeTree`. Таблица заполняется только тогда, когда [`predicate_statistics_sample_rate`](/ru/reference/settings/session-settings#predicate_statistics_sample_rate) больше `0`.

Используйте эту таблицу, чтобы оценить, насколько селективны пользовательские предикаты в реальных рабочих нагрузках и сколько гранул остается после фильтрации по первичному ключу или индексу пропуска данных. Эти данные предназначены для выработки рекомендаций по индексам и проекциям на основе рабочих нагрузок.

<div id="row-shapes">
  ## Виды строк
</div>

Один запрос может порождать два вида строк в `system.predicate_statistics_log`:

* **Строки фильтров**, создаваемые на каждом шаге prewhere/filter в `MergeTreeSelectProcessor`. В них заполняются `predicate_expression`, `input_rows`, `passed_rows`, `filter_selectivity`, а также столбцы, относящиеся ко всему предикату: `total_input_rows`, `total_passed_rows`, `total_selectivity`. Столбцы, связанные с индексами, остаются пустыми.
* **Строки индексов**, создаваемые на каждом шаге чтения в `ReadFromMergeTree`. В них заполняются массивы `index_names`, `index_types`, `total_granules`, `granules_after` и `index_selectivities` — по одной записи на каждый этап индексации (primary key, партиция, индекс пропуска данных). Столбцы, связанные с предикатами, остаются пустыми.

Строки фильтров и строки индексов для одного и того же запроса имеют одинаковые `query_id` и `table`, поэтому при необходимости их можно объединить с помощью JOIN.

<div id="sampling-and-overhead">
  ## Сэмплирование и накладные расходы
</div>

Сэмплирование управляется параметром [`predicate_statistics_sample_rate`](/ru/reference/settings/session-settings#predicate_statistics_sample_rate):

* `0` отключает сбор.
* `1` включает сэмплирование каждого запроса.
* `N > 1` включает сэмплирование примерно `1 / N` запросов по хешу `query_id`.

Меньшие значения дают больше данных, но увеличивают нагрузку на CPU при чтении и число записей в системном журнале. После включения этой настройки используйте [`SYSTEM FLUSH LOGS`](/ru/reference/statements/system#flush-logs), если нужно, чтобы строки появились сразу.

<div id="columns">
  ## Столбцы
</div>

* `hostname` ([LowCardinality(String)](/ru/reference/data-types/lowcardinality)) — Имя хоста сервера, выполняющего запрос.
* `event_date` ([Date](/ru/reference/data-types/date)) — Дата события.
* `event_time` ([DateTime](/ru/reference/data-types/datetime)) — Временная метка, когда была сделана эта запись в журнале.
* `database` ([LowCardinality(String)](/ru/reference/data-types/lowcardinality)) — Имя базы данных целевой таблицы.
* `table` ([LowCardinality(String)](/ru/reference/data-types/lowcardinality)) — Имя целевой таблицы.
* `query_id` ([String](/ru/reference/data-types/string)) — Идентификатор запроса для связи с query\_log.
* `predicate_expression` ([String](/ru/reference/data-types/string)) — Полное выражение фильтра, обрабатываемое на этом шаге prewhere/filter (дамп ActionsDAG).
* `input_rows` ([UInt64](/ru/reference/data-types/int-uint)) — Строки, поступающие на этот шаг prewhere/filter.
* `passed_rows` ([UInt64](/ru/reference/data-types/int-uint)) — Строки, прошедшие этот шаг prewhere/filter.
* `filter_selectivity` ([Float64](/ru/reference/data-types/float)) — Селективность этого шага: passed\_rows / input\_rows.
* `total_input_rows` ([UInt64](/ru/reference/data-types/int-uint)) — Строки, поступающие на первый шаг prewhere (общее число строк, прочитанных из гранул).
* `total_passed_rows` ([UInt64](/ru/reference/data-types/int-uint)) — Строки, прошедшие все шаги prewhere (строки, переданные запросу).
* `total_selectivity` ([Float64](/ru/reference/data-types/float)) — Селективность всего предиката: total\_passed\_rows / total\_input\_rows.
* `index_names` ([Array(LowCardinality(String))](/ru/reference/data-types/array)) — Имена применённых индексов, например \['PrimaryKey', 'idx\_bf\_status'] (только для строк индексов).
* `index_types` ([Array(LowCardinality(String))](/ru/reference/data-types/array)) — Типы применённых индексов: PrimaryKey, Skip, MinMax, Partition (только для строк индексов).
* `total_granules` ([Array(UInt64)](/ru/reference/data-types/array)) — Гранулы на входе каждого этапа применения индекса (только для строк индексов).
* `granules_after` ([Array(UInt64)](/ru/reference/data-types/array)) — Гранулы, оставшиеся после каждого этапа применения индекса (только для строк индексов).
* `index_selectivities` ([Array(Float64)](/ru/reference/data-types/array)) — Селективность каждого индекса: granules\_after / total\_granules (только для строк индексов).

<div id="example">
  ## Пример
</div>

```sql theme={null}
SET predicate_statistics_sample_rate = 1;

SELECT *
FROM hits
WHERE URL LIKE '%/product/%' AND EventDate >= today() - 7
FORMAT Null;

SYSTEM FLUSH LOGS predicate_statistics_log;

SELECT
    query_id,
    predicate_expression,
    round(filter_selectivity, 3) AS step_selectivity,
    round(total_selectivity, 3) AS query_selectivity,
    index_names,
    index_selectivities
FROM system.predicate_statistics_log
WHERE table = 'hits'
ORDER BY event_time DESC
LIMIT 10;
```

<div id="see-also">
  ## См. также
</div>

* [`predicate_statistics_sample_rate`](/ru/reference/settings/session-settings#predicate_statistics_sample_rate)
* [system.query\_log](/ru/reference/system-tables/query_log)
