在我的例子中,我需要将一些维度表加载到clickhouse中,以便与事实表连接。
例如,要与订单(事实)表联接的买方(维度)表:
select
order.id,
buyer.name
from order
left join buyer
on order.buyer_id = buyer.id
一般来说,我将创建一个 engine = Join
table。但我的一些维度表太大,无法放入ram中,所以我选择mergetree引擎作为解决方案。正如我们所知,clickhouse会自动切断查询中指定分区键的分区数据,并使用稀疏索引快速定位数据。
我的问题是,
如何为mergetree引擎维度表选择分区键?
我应该用hashed吗 id
作为分区键,作为维度表的 id
键通常是连接的?
建议每个分区有多少个标记(部件)?
由于8192是推荐的粒度,我可以设置诸如modulo(id,10)之类的分区规则来控制分区的数量和分区中的部分数量。但是如何设置分区个数与分区中部分个数的比值,以便更有利于数据压缩和提高查询速度呢?模(id,10)分区方式会破坏数据一致性和数据压缩吗?
或者,我应该避免在clickhouse中创建维度表,而是创建一个严格满足要求的宽表吗?
暂无答案!
目前还没有任何答案,快来回答吧!