Показывает для каждой комбинации (часть, столбец, подпоток) таблицы семейства 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} │
└───────────┴────────────────────┘