Clickhouse:按与 table 存储耗尽内存相同的顺序排序

Clickhouse: order by same order as table storage runs out of memory

我在 table

中有数十亿行
CREATE TABLE sample ( PN String,  
                      CHROM String,  
                      POS UInt32) 
ENGINE = MergeTree 
PARTITION BY PN 
ORDER BY (CHROM, POS) 
SETTINGS index_granularity = 8192;

每个 PN 大约有 500 万行

我想 return 所有行按 CHROM、POS

的顺序排列
 select * from sample order by CHROM, POS

内存不足。

由于数据已经存储在 CHROM 中,POS 订单虽然被 PN 分区,但有一种方法可以 'stream' 分区中的所有数据并按顺序合并它们而不需要太多内存。

排序后的数据存储在分区范围内,因此,要对所有分区中的ALL ROWS进行排序,需要将全部内容加载到内存中,然后进行排序。

将分区键用作 PARTITION BY CHROMPARTITION BY (CHROM, POS) 会更好。

作为替代方案,您可以启用外部排序(请参阅 max_bytes_before_external_sort)以在磁盘而非内存中收集 pre-sorted 数据。