Как протестировать различные кодеки компрессии
Пример
Создайте test_table на основе исходной таблицы.
CREATE TABLE test_table AS source_table ENGINE=MergeTree() PARTITION BY ...;
Если у исходной таблицы есть движок Replicated*MergeTree, необходимо будет изменить его на нереплицируемый.
Присоедините один раздел с данными из исходной таблицы к test_table.
ALTER TABLE test_table ATTACH PARTITION ID '20210120' FROM source_table;
Вы можете изменить столбец или создать новый на базе предыдущего.
ALTER TABLE test_table MODIFY COLUMN column_a CODEC(ZSTD(2));
ALTER TABLE test_table ADD COLUMN column_new UInt32
DEFAULT toUInt32OrZero(column_old) CODEC(T64,LZ4);
После этого Вам нужно будет заполнить измененные столбцы данными.
ALTER TABLE test_table UPDATE column_a=column_a, column_new=column_new WHERE 1;
Статус мутации можно просмотреть с помощью таблицы system.mutations
SELECT * FROM system.mutations;
Вы также можете уничтожить мутации, если с ней возникли какие-либо проблемы
KILL MUTATION WHERE ...
Полезные запросы
SELECT
database,
table,
count() AS parts,
uniqExact(partition_id) AS partition_cnt,
sum(rows),
formatReadableSize(sum(data_compressed_bytes) AS comp_bytes) AS comp,
formatReadableSize(sum(data_uncompressed_bytes) AS uncomp_bytes) AS uncomp,
uncomp_bytes / comp_bytes AS ratio
FROM system.parts
WHERE active
GROUP BY
database,
table
ORDER BY comp_bytes DESC
Copy
SELECT
database,
table,
column,
type,
sum(rows) AS rows,
sum(column_data_compressed_bytes) AS compressed_bytes,
formatReadableSize(compressed_bytes) AS compressed,
formatReadableSize(sum(column_data_uncompressed_bytes)) AS uncompressed,
sum(column_data_uncompressed_bytes) / compressed_bytes AS ratio,
any(compression_codec) AS codec
FROM system.parts_columns AS pc
LEFT JOIN system.columns AS c
ON (pc.database = c.database) AND (c.table = pc.table) AND (c.name = pc.column)
WHERE (database LIKE '%') AND (table LIKE '%') AND active
GROUP BY
database,
table,
column,
type
ORDER BY database, table, sum(column_data_compressed_bytes) DESC




