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)) — Размер сжатых данных в подпотоке в байтах. NULL для частей Compact.
  • data_uncompressed_bytes (Nullable(UInt64)) — Размер несжатых данных в подпотоке в байтах. NULL для частей Compact.
  • codec_block_counts (Map(String, UInt64)) — Число сжатых блоков в этом подпотоке с группировкой по кодеку. Пусто для частей Compact: их столбцы используют один общий файл данных, поэтому для отдельных потоков не указывается используемый кодек.

Пример использования

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 column и 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