就我而言,我需要将一些维度表加载到ClickHouse中以与事实表连接。
例如,要结合订单(事实)表的买方(维度)表:
select
order.id,buyer.name
from order
left join buyer
on order.buyer_id = buyer.id
通常,我将创建一个engine = Join
表。但是我的某些维度表太大,无法容纳在RAM中,因此我选择MergeTree引擎作为解决方案。
我们知道,ClickHouse会自动切断在查询中指定了分区键的分区数据,并使用稀疏索引快速定位数据。
我的问题是
- 如何为MergeTree引擎维度表选择分区键?
- 我应该将哈希的
id
用作分区键,还是用作维表的 通常会使用id
键吗?
- 我应该将哈希的
- 建议每个分区有多少个标记(部分)?
- 由于建议使用8192的粒度,因此我可以设置诸如modulo(id,10)之类的分区规则,以控制分区数和分区中的部件数。 但是如何设置分区数与分区数之比,更有利于数据压缩,提高查询速度呢? 模(id,10)分区方式是否会破坏数据一致性和数据压缩?
- 或者,我应该避免在ClickHouse中创建维度表,而是创建一个严格满足要求的宽表吗?