ClickHouse Projection的使用小结
物化视图 和 Projection技术其实都是预聚合的思路。ClickHouse release v22.2版本已经默认将Projection功能开启(allow_experimental_projection_optimization )。 2022-03-17日ClickHouse release v22.3-lts已经发布。大家可以基于此版本来使用Projection功能。
物化视图和Projection的功能对比
较物化视图最大的优点:Projection可以保证数据一致性。物化视图可以理解为触发的机制,写入base表的时候,一起写入物化视图,两个过程无法保证一致性。从业务功能方面两者解决的问题的场景是一样的。都是通过预聚合方式,提前将数据聚合好。相比而言,物化视图灵活性会更优,一般来说都是通过物化视图将源表数据抽取到新表中,这样我们可以在新表上按照业务场景灵活的进行分区、索引操作。这些在Projection上是做不到的。尤其对于聚合前后数据量相当的场景,如果对一致性要求不高的场景,使用物化视图会是更好的选择。
Projection的使用和介绍
大家可以参考如下文档:
https://presentations.clickhouse.com/percona2021/projections.pdf
写的还是非常详细的。
Projection新建好后,执行正常的业务SQL,怎么判断是否命中了,联调的时候可以将参数:force_optimize_projection配置为1,查询的时候如果没有命中Projection,会抛出错误信息的。生产环境可以别这么做,此参数默认值是0。
查询优化的思路
1)聚合查询(聚合后数据较聚合前数据量少很多)
一致性要求高场景,使用Projection。对一致性要求低,或者想对聚合后的表做更灵活的配置,请选用物化视图。
2)明细查询或者聚合后数据较聚合前数据量相当
建议使用二级索引(跳数索引)来进行查询优化。