> ## 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.

> Indique, pour chaque (partie de données, colonne, sous-flux) d’une table MergeTree, le nombre de blocs compressés utilisant chaque codec.

# mergeTreeCodecBlockCounts

Indique, pour chaque combinaison (partie de données, colonne, sous-flux) d’une table MergeTree, combien de blocs compressés utilisent chaque codec. Cela permet d’observer la sélection adaptative de codec (activée par le paramètre `enable_adaptive_codec_selection`), qui peut choisir un codec par bloc pour les colonnes utilisant le codec par défaut.

La sélection de `codec_block_counts` lit les fichiers de données `.bin`, et non uniquement les métadonnées. Les autres colonnes ne contiennent que des métadonnées.

Les parties de données qui n’enregistrent pas leurs sous-flux dans `columns_substreams.txt` ne sont pas répertoriées.

Chaque valeur indiquée est dérivée des données de la table ; la lecture de n’importe quelle colonne du résultat requiert donc le privilège `SELECT` sur toutes les colonnes de la table. Un grant ne couvrant qu’une partie des colonnes est insuffisant. Ce privilège est également requis pour résoudre la structure de la fonction, par exemple via `DESCRIBE`. Un utilisateur qui n’est pas autorisé à voir la table du tout, c’est-à-dire qui ne dispose pas du privilège `SHOW TABLES` sur celle-ci, obtient `ACCESS_DENIED` qu’elle existe ou non ; la fonction n’indique donc pas à un tel utilisateur quelles tables existent.

Si une politique de lignes s’applique à la table pour l’utilisateur courant, la lecture de `codec_block_counts` génère `ACCESS_DENIED`, car les décomptes incluraient des lignes masquées par la politique. Les autres colonnes restent lisibles ; `system.parts_columns` les indique indépendamment des politiques de lignes.

## Syntaxe

```sql theme={null}
mergeTreeCodecBlockCounts(database, table)
```

## Arguments

| Argument | Description |
| - | - |
| `database` | Le nom de la base de données de la table. |
| `table` | Le nom de la table MergeTree. |

## Valeur renvoyée

Un objet table comportant une ligne par (partie active, colonne, sous-flux) de la table source :

* `part_name` ([String](/fr/reference/data-types/string)) — La partie de données active à laquelle appartient la colonne.
* `column` ([String](/fr/reference/data-types/string)) — Le nom de la colonne.
* `substream` ([String](/fr/reference/data-types/string)) — Le flux physique de la colonne auquel se rapportent les décomptes. Correspond à `system.parts_columns.substreams`.
* `data_compressed_bytes` ([Nullable(UInt64)](/fr/reference/data-types/nullable)) — Taille des données compressées du sous-flux, en octets. `NULL` pour les parties `Compact`.
* `data_uncompressed_bytes` ([Nullable(UInt64)](/fr/reference/data-types/nullable)) — Taille des données non compressées du sous-flux, en octets. `NULL` pour les parties `Compact`.
* `codec_block_counts` ([Map(String, UInt64)](/fr/reference/data-types/map)) — Nombre de blocs compressés de ce sous-flux, regroupés par codec. Vide pour les parties `Compact`, dont les colonnes partagent un même fichier de données et ne disposent donc pas d’une attribution de codec par flux.

## Exemple d'utilisation

```sql theme={null}
CREATE TABLE mt (a UInt64) ENGINE = MergeTree ORDER BY a
SETTINGS min_bytes_for_wide_part = 0;

INSERT INTO mt SELECT number FROM numbers(100000);

SELECT column, substream, codec_block_counts
FROM mergeTreeCodecBlockCounts(currentDatabase(), mt);
```

```text theme={null}
┌─column─┬─substream─┬─codec_block_counts─┐
│ a      │ a         │ {'LZ4':13}         │
└────────┴───────────┴────────────────────┘
```

Les totaux par colonne s’obtiennent avec un `GROUP BY column` et [`sumMap`](/fr/reference/functions/aggregate-functions/sumMap) :

```sql theme={null}
SELECT column, sumMap(codec_block_counts)
FROM mergeTreeCodecBlockCounts(currentDatabase(), mt)
GROUP BY column;
```

Une colonne `LowCardinality` indique séparément les flux de son dictionnaire et de ses index :

```sql theme={null}
CREATE TABLE mt_lc (s LowCardinality(String)) ENGINE = MergeTree ORDER BY tuple()
SETTINGS min_bytes_for_wide_part = 0;

INSERT INTO mt_lc SELECT toString(number % 1000) FROM numbers(1000000);

SELECT substream, codec_block_counts
FROM mergeTreeCodecBlockCounts(currentDatabase(), mt_lc)
WHERE column = 's'
ORDER BY substream;
```

```text theme={null}
┌─substream─┬─codec_block_counts─┐
│ s         │ {'LZ4':31}         │
│ s.dict    │ {'LZ4':1}          │
└───────────┴────────────────────┘
```
