Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

mergeTreeCodecBlockCounts

按 MergeTree 表的每个 (分片、列、子流) 统计使用各编解码器的压缩块数量。借此可观察自适应编解码器选择 (由 allow_experimental_adaptive_codec_selection 设置启用) :该功能可为使用默认编解码器的列中每个块选择编解码器。

选择 codec_block_counts 会读取 .bin 数据文件,而不只是元数据。其他列仅读取元数据。

未在 columns_substreams.txt 中记录子流的 分片 不会列出。

如果行策略适用于当前用户访问该表,读取 codec_block_counts 会引发 ACCESS_DENIED,因为计数会包含被该策略隐藏的行。其他列仍可读取,system.parts_columns 不受行策略影响,仍会报告这些列。

语法

mergeTreeCodecBlockCounts(database, table)

参数

参数 描述
database 表的数据库名称。
table MergeTree 表名称。

返回值

一个表对象,源表中每个 (活动分片、列、子流) 组合对应一行:

  • part_name (String) — 该列所属的活动分片。
  • column (String) — 列名。
  • substream (String) — 计数对应的列物理流。与 system.parts_columns.substreams 一致。
  • data_compressed_bytes (Nullable(UInt64)) — 子流中压缩数据的大小,单位为字节。对于 Compact 分片,值为 NULL
  • data_uncompressed_bytes (Nullable(UInt64)) — 子流中未压缩数据的大小,单位为字节。对于 Compact 分片,值为 NULL
  • codec_block_counts (Map(String, UInt64)) — 此子流中按 codec 分组的压缩块数量。对于 Compact 分片,该值为空,因为其列共用一个数据文件,因此无法按流归属 codec。

使用示例

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);
┌─column─┬─substream─┬─codec_block_counts─┐
│ a      │ a         │ {'LZ4':13}         │
└────────┴───────────┴────────────────────┘

列级汇总是按列执行的 GROUP BY,并使用 sumMap

SELECT column, sumMap(codec_block_counts)
FROM mergeTreeCodecBlockCounts(currentDatabase(), mt)
GROUP BY column;

LowCardinality 列会分别显示其字典流和索引流:

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;
┌─substream─┬─codec_block_counts─┐
│ s         │ {'LZ4':31}         │
│ s.dict    │ {'LZ4':1}          │
└───────────┴────────────────────┘
Navigation