drop table if exists test;
create table test (pk1 Int32, val UInt64 ) ENGINE = MergeTree() order by (pk1);
insert into test select arr, cityHash64(number) from numbers(2000) array join range(8192) as arr;
insert into test select arr, cityHash64(number+2000) from numbers(2000) array join range(8192) as arr;
insert into test select arr, cityHash64(number+4000) from numbers(2000) array join range(8192) as arr;
SELECT
table,
name,
column,
column_data_compressed_bytes,
column_data_uncompressed_bytes,
column_data_compressed_bytes / column_data_uncompressed_bytes AS compratio
FROM system.parts_columns AS pc
WHERE (table = 'test') AND active
┌─table─┬─name──────┬─column─┬─column_data_compressed_bytes─┬─column_data_uncompressed_bytes─┬─────────────compratio─┐
│ test │ all_1_1_0 │ pk1 │ 333029 │ 65536000 │ 0.0050816192626953124 │
│ test │ all_1_1_0 │ val │ 32584000 │ 131072000 │ 0.24859619140625 │
│ test │ all_2_2_0 │ pk1 │ 333029 │ 65536000 │ 0.0050816192626953124 │
│ test │ all_2_2_0 │ val │ 32584000 │ 131072000 │ 0.24859619140625 │
│ test │ all_3_3_0 │ pk1 │ 333029 │ 65536000 │ 0.0050816192626953124 │
│ test │ all_3_3_0 │ val │ 32584000 │ 131072000 │ 0.24859619140625 │
└───────┴───────────┴────────┴──────────────────────────────┴────────────────────────────────┴───────────────────────┘
optimize table test final;
SELECT
table,
name,
column,
column_data_compressed_bytes,
column_data_uncompressed_bytes,
column_data_compressed_bytes / column_data_uncompressed_bytes AS compratio
FROM system.parts_columns AS pc
WHERE (table = 'test') AND active
┌─table─┬─name──────┬─column─┬─column_data_compressed_bytes─┬─column_data_uncompressed_bytes─┬────────────compratio─┐
│ test │ all_1_3_1 │ pk1 │ 924725 │ 196608000 │ 0.004703394571940104 │
│ test │ all_1_3_1 │ val │ 289752000 │ 393216000 │ 0.73687744140625 │
└───────┴───────────┴────────┴──────────────────────────────┴────────────────────────────────┴──────────────────────┘
@den_crane @rheinx я насимулировал =))) 24% в одном парте, после мерджа трех партов ломается до 73%...
вот... короче, у вас данные такие...
если у вас рандомность колонки увеличивается посли мерджа (т.е. рандом данные внутри 64кб блоков), вам ничего не поможет...
не будет он сжимать.
а данные у вас именно такие, Андрей, живите с ними... или zstd вешайте, или упрощайте ключ сортировки