Clickhouse:按与表存储空间不足相同的顺序进行排序

时间:2019-06-06 11:28:35

标签: clickhouse

我的表中有数十亿行

CREATE TABLE sample ( PN String,  
                      CHROM String,  
                      POS UInt32) 
ENGINE = MergeTree 
PARTITION BY PN 
ORDER BY (CHROM, POS) 
SETTINGS index_granularity = 8192;

每个PN大约有500万行

我想按CHROM,POS的顺序返回所有行

 select * from sample order by CHROM, POS

这用尽了内存。

由于数据已经存储在CHROM中,所以POS顺序(尽管已由PN划分)是一种可以从分区“流式传输”所有数据并按顺序合并它们而无需太多内存的方法。

1 个答案:

答案 0 :(得分:1)

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

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

作为替代方案,您可以启用外部排序(请参阅max_bytes_before_external_sort)以在磁盘而不是内存上收集预先排序的数据。