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

> 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 `enable_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`.

Todos los valores indicados se derivan de los datos de la tabla, por lo que leer cualquier columna del resultado requiere el privilegio `SELECT` en todas las columnas de la tabla. Una concesión que abarque solo algunas de las columnas no es suficiente. El privilegio también es necesario para resolver la estructura de la función, por ejemplo, mediante `DESCRIBE`. Un usuario que no tiene permiso para ver la tabla en absoluto, es decir, que no tiene el privilegio `SHOW TABLES` sobre ella, recibe `ACCESS_DENIED` tanto si existe como si no, por lo que la función no le indica qué tablas existen.

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.

## Sintaxis

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

## Argumentos

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

## Valor devuelto

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](/es/reference/data-types/string)) — La parte de datos activa a la que pertenece la columna.
* `column` ([String](/es/reference/data-types/string)) — El nombre de la columna.
* `substream` ([String](/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)](/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)](/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)](/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.

## Ejemplo de uso

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