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

> Table système contenant des statistiques échantillonnées sur la sélectivité des filtres et des index recueillies dans les pipelines de lecture `MergeTree` lors de l’exécution des requêtes.

# system.predicate_statistics_log

<Info>
  **Interroger dans ClickHouse Cloud**

  Les données de cette table système sont stockées localement sur chaque nœud de ClickHouse Cloud. Pour obtenir une vue complète de l’ensemble des données, il faut donc utiliser la fonction `clusterAllReplicas`. Consultez [cette page](/fr/reference/system-tables/overview#system-tables-in-clickhouse-cloud) pour plus de détails.
</Info>

## Description

Contient des statistiques de sélectivité échantillonnées collectées lors de la lecture de tables `MergeTree`. La table n'est renseignée que lorsque [`predicate_statistics_sample_rate`](/fr/reference/settings/session-settings/other#predicate_statistics_sample_rate) est supérieur à `0`.

**Disponibilité**

`system.predicate_statistics_log` n'est créée que si la configuration du serveur contient une section `predicate_statistics_log`. Après avoir créé le log, définissez `predicate_statistics_sample_rate` à une valeur supérieure à `0` pour collecter des lignes. En l'absence de cette section de log, les requêtes sur la table échouent avec `UNKNOWN_TABLE`.

```xml theme={null}
<clickhouse>
    <predicate_statistics_log>
        <database>system</database>
        <table>predicate_statistics_log</table>
        <partition_by>toYYYYMM(event_date)</partition_by>
        <flush_interval_milliseconds>7500</flush_interval_milliseconds>
    </predicate_statistics_log>
</clickhouse>
```

Utilisez cette table pour examiner le degré de sélectivité des prédicats utilisateur dans des charges de travail réelles, ainsi que le nombre de granules restant après le filtrage par clé primaire ou index de saut. Ces données sont destinées à alimenter des recommandations d'index et de projections fondées sur les charges de travail.

## Formes des lignes

Une même requête peut produire deux types de lignes dans `system.predicate_statistics_log` :

* **Lignes de filtre**, émises à chaque étape prewhere/filter dans `MergeTreeSelectProcessor`. Elles alimentent `predicate_expression`, `input_rows`, `passed_rows`, `filter_selectivity`, ainsi que les colonnes du prédicat complet `total_input_rows`, `total_passed_rows`, `total_selectivity`. Les colonnes liées aux index sont vides.
* **Lignes d’index**, émises à chaque étape de lecture dans `ReadFromMergeTree`. Elles alimentent les tableaux `index_names`, `index_types`, `total_granules`, `granules_after` et `index_selectivities`, avec une entrée par étape d’index (clé primaire, partition, skip indexes). Les colonnes liées aux prédicats sont vides.

Les lignes de filtre et les lignes d’index d’une même requête partagent le même `query_id` et la même `table`, et peuvent donc être jointes lorsque les deux sont nécessaires.

## Échantillonnage et surcoût

L'échantillonnage est contrôlé par [`predicate_statistics_sample_rate`](/fr/reference/settings/session-settings/other#predicate_statistics_sample_rate) :

* `0` désactive la collecte.
* `1` échantillonne chaque requête.
* `N > 1` échantillonne environ `1 / N` des requêtes, selon un hachage de `query_id`.

Des valeurs plus faibles produisent davantage de données, mais augmentent la charge CPU sur le chemin de lecture ainsi que le nombre d'écritures dans le journal système. Après avoir activé ce paramètre, utilisez [`SYSTEM FLUSH LOGS`](/fr/reference/statements/system#flush-logs) si vous avez besoin que les lignes apparaissent immédiatement.

Cette table peut être tronquée ou supprimée à tout moment sans risque.

## Colonnes

* `hostname` ([LowCardinality(String)](/fr/reference/data-types/lowcardinality)) — Nom d’hôte du serveur qui exécute la requête.
* `clickhouse_version` ([LowCardinality(String)](/fr/reference/data-types/lowcardinality)) — Version du serveur ClickHouse qui a produit la ligne.
* `system_processor` ([LowCardinality(String)](/fr/reference/data-types/lowcardinality)) — Architecture CPU du serveur ClickHouse qui a produit la ligne.
* `event_date` ([Date](/fr/reference/data-types/date)) — Date de l’événement.
* `event_time` ([DateTime](/fr/reference/data-types/datetime)) — Horodatage de l’écriture de cette entrée de journal.
* `database` ([LowCardinality(String)](/fr/reference/data-types/lowcardinality)) — Nom de la base de données de la table cible.
* `table` ([LowCardinality(String)](/fr/reference/data-types/lowcardinality)) — Nom de la table cible.
* `query_id` ([String](/fr/reference/data-types/string)) — ID de requête permettant de faire le lien avec query\_log.
* `predicate_expression` ([String](/fr/reference/data-types/string)) — Expression de filtre complète prise en charge par cette étape prewhere/filter (dump ActionsDAG).
* `input_rows` ([UInt64](/fr/reference/data-types/int-uint)) — Lignes entrant dans cette étape prewhere/filter.
* `passed_rows` ([UInt64](/fr/reference/data-types/int-uint)) — Lignes conservées après cette étape prewhere/filter.
* `filter_selectivity` ([Float64](/fr/reference/data-types/float)) — Sélectivité de cette étape : passed\_rows / input\_rows.
* `total_input_rows` ([UInt64](/fr/reference/data-types/int-uint)) — Lignes entrant dans la première étape prewhere (nombre total de lignes lues à partir des granules).
* `total_passed_rows` ([UInt64](/fr/reference/data-types/int-uint)) — Lignes conservées après toutes les étapes prewhere (lignes transmises à la requête).
* `total_selectivity` ([Float64](/fr/reference/data-types/float)) — Sélectivité de l’ensemble du prédicat : total\_passed\_rows / total\_input\_rows.
* `index_names` ([Array(LowCardinality(String))](/fr/reference/data-types/array)) — Noms des index appliqués, par ex. \['PrimaryKey', 'idx\_bf\_status'] (lignes d’index uniquement).
* `index_types` ([Array(LowCardinality(String))](/fr/reference/data-types/array)) — Types d’index appliqués : PrimaryKey, Skip, MinMax, Partition (lignes d’index uniquement).
* `total_granules` ([Array(UInt64)](/fr/reference/data-types/array)) — Granules à l’entrée de chaque étape d’index (lignes d’index uniquement).
* `granules_after` ([Array(UInt64)](/fr/reference/data-types/array)) — Granules restants après chaque étape d’index (lignes d’index uniquement).
* `index_selectivities` ([Array(Float64)](/fr/reference/data-types/array)) — Sélectivité par index : granules\_after / total\_granules (lignes d’index uniquement).

## Exemple

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

## Voir aussi

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