clickhouse:按表存储耗尽内存的相同顺序排序

qgelzfjb  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(484)

我在一个表中有数十亿行

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

每个pn有大约500万行
我想按色度,位置的顺序返回所有行

select * from sample order by CHROM, POS

内存不足。
由于数据已经存储在chrom中,pos-order(尽管通过pn进行了分区)是一种方法,可以“流式传输”分区中的所有数据,并按顺序合并它们,而不需要太多内存。

7tofc5zh

7tofc5zh1#

排序后的数据存储在分区范围内,因此,要对所有分区中的所有行进行排序,需要将整个内容加载到内存中,然后对其进行排序。
使用分区键作为partitionby chrom或partitionby(chrom,pos)会更好。
或者,您可以启用外部排序(请参阅外部排序之前的最大字节数),以便在磁盘而不是内存上收集预排序的数据。

相关问题