我在一个表中有数十亿行
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进行了分区)是一种方法,可以“流式传输”分区中的所有数据,并按顺序合并它们,而不需要太多内存。
1条答案
按热度按时间7tofc5zh1#
排序后的数据存储在分区范围内,因此,要对所有分区中的所有行进行排序,需要将整个内容加载到内存中,然后对其进行排序。
使用分区键作为partitionby chrom或partitionby(chrom,pos)会更好。
或者,您可以启用外部排序(请参阅外部排序之前的最大字节数),以便在磁盘而不是内存上收集预排序的数据。