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

> MergeTree テーブルの各（パーツ、カラム、サブストリーム）について、各 codec を使用している圧縮ブロックの数をレポートします。

# mergeTreeCodecBlockCounts

MergeTree テーブルの (パーツ、カラム、サブストリーム) ごとに、各 codec を使用している圧縮ブロック数を報告します。これにより、デフォルト codec を使用するカラムではブロックごとに codec を選択できる、`allow_experimental_adaptive_codec_selection` 設定で有効になる適応型 codec 選択を確認できます。

`codec_block_counts` を選択すると、メタデータだけでなく `.bin` データファイルも読み取ります。ほかのカラムはメタデータのみを読み取ります。

サブストリームを `columns_substreams.txt` に記録しないパーツは一覧に表示されません。

現在のユーザーに対してテーブルに行ポリシーが適用されている場合、`codec_block_counts` を読み取ると `ACCESS_DENIED` がスローされます。カウントにはポリシーによって非表示となる行も含まれるためです。ほかのカラムは引き続き読み取ることができ、`system.parts_columns` は行ポリシーにかかわらずこれらを報告します。

<div id="syntax">
  ## 構文
</div>

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

<div id="arguments">
  ## 引数
</div>

| 引数         | 説明                 |
| ---------- | ------------------ |
| `database` | テーブルのデータベース名。      |
| `table`    | MergeTree テーブルの名前。 |

<div id="returned-value">
  ## 戻り値
</div>

ログソーステーブルの (アクティブなパーツ、カラム、サブストリーム) ごとに1行を含むテーブルオブジェクト:

* `part_name` ([String](/docs/ja/reference/data-types/string)) — カラムが属するアクティブなデータパーツ。
* `column` ([String](/docs/ja/reference/data-types/string)) — カラム名。
* `substream` ([String](/docs/ja/reference/data-types/string)) — カウント対象のカラムの物理ストリーム。`system.parts_columns.substreams` と一致します。
* `data_compressed_bytes` ([Nullable(UInt64)](/docs/ja/reference/data-types/nullable)) — サブストリーム内の圧縮データのサイズ (バイト単位) 。`Compact` パーツでは `NULL`。
* `data_uncompressed_bytes` ([Nullable(UInt64)](/docs/ja/reference/data-types/nullable)) — サブストリーム内の非圧縮データのサイズ (バイト単位) 。`Compact` パーツでは `NULL`。
* `codec_block_counts` ([Map(String, UInt64)](/docs/ja/reference/data-types/map)) — codec ごとに集計した、このサブストリームの圧縮ブロック数。カラムが1つのデータファイルを共有するためストリームごとの codec 割り当てがない `Compact` パーツでは空です。

<div id="usage-example">
  ## 使用例
</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}         │
└────────┴───────────┴────────────────────┘
```

カラムレベルのtotalsは、[`sumMap`](/docs/ja/reference/functions/aggregate-functions/sumMap) を使用する `GROUP BY column` です。

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

`LowCardinality` カラムでは、Dictionary と索引のストリームがそれぞれ個別に報告されます。

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