> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Indica, para cada (parte, columna, subflujo) de una tabla MergeTree, cuántos bloques comprimidos usan cada códec.

# mergeTreeCodecBlockCounts

Indica, para cada (parte, columna, subflujo) de una tabla MergeTree, cuántos bloques comprimidos usan cada códec. Permite observar la selección adaptativa de códecs (habilitada por la configuración `allow_experimental_adaptive_codec_selection`), que puede elegir un códec por bloque para las columnas que usan el códec predeterminado.

La selección de `codec_block_counts` lee archivos de datos `.bin`, no solo metadatos. Las demás columnas solo contienen metadatos.

No se incluyen las partes que no registran sus subflujos en `columns_substreams.txt`.

Si se aplica una política de filas a la tabla para el usuario actual, la lectura de `codec_block_counts` genera `ACCESS_DENIED`, ya que los recuentos incluirían filas que la política oculta. Las demás columnas siguen siendo legibles; `system.parts_columns` las informa independientemente de las políticas de filas.

<div id="syntax">
  ## Sintaxis
</div>

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

<div id="arguments">
  ## Argumentos
</div>

| Argumento  | Descripción                                |
| ---------- | ------------------------------------------ |
| `database` | El nombre de la base de datos de la tabla. |
| `table`    | El nombre de la tabla MergeTree.           |

<div id="returned-value">
  ## Valor devuelto
</div>

Un objeto de tabla con una fila por cada combinación de (parte activa, columna y subflujo) de la tabla de origen:

* `part_name` ([String](/docs/es/reference/data-types/string)) — La parte de datos activa a la que pertenece la columna.
* `column` ([String](/docs/es/reference/data-types/string)) — El nombre de la columna.
* `substream` ([String](/docs/es/reference/data-types/string)) — El flujo físico de la columna al que corresponden los recuentos. Coincide con `system.parts_columns.substreams`.
* `data_compressed_bytes` ([Nullable(UInt64)](/docs/es/reference/data-types/nullable)) — Tamaño de los datos comprimidos en el subflujo, en bytes. `NULL` para las partes `Compact`.
* `data_uncompressed_bytes` ([Nullable(UInt64)](/docs/es/reference/data-types/nullable)) — Tamaño de los datos sin comprimir en el subflujo, en bytes. `NULL` para las partes `Compact`.
* `codec_block_counts` ([Map(String, UInt64)](/docs/es/reference/data-types/map)) — Número de bloques comprimidos de este subflujo, agrupados por códec. Vacío para las partes `Compact`, cuyas columnas comparten un archivo de datos y, por tanto, no tienen una atribución de códec por flujo.

<div id="usage-example">
  ## Ejemplo de uso
</div>

```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}         │
└────────┴───────────┴────────────────────┘
```

Los totales por columna se obtienen mediante un `GROUP BY column` con [`sumMap`](/docs/es/reference/functions/aggregate-functions/sumMap):

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

Una columna `LowCardinality` informa de forma independiente los flujos del diccionario y de los índices:

```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}          │
└───────────┴────────────────────┘
```
