在实际的业务中,我们通常需要对数据进行对原始明细数据任意维度的分析以及固定维度聚合分析。两种场景并存的情况下,聚合模型表由于缺失部分明细数据,就无法满足用户对明细数据的分析需求。如果仅建立一个明细模型,虽然可以满足任意维度的分析需求,但对明细数据进行聚合分析时,实时分析性能不佳。若同时建立一个聚合模型和一个明细模型,虽然可以满足性能和任意维度分析,但两表之间本身无关联,需要业务方自行选择分析表,不灵活也不易用。
物化视图就是StarRocks为明细模型打造的“预计算”方案,本质上也是“空间换时间”,但实现更为灵活。
假设table11是一张销售记录明细表,存储了每个交易的交易id、销售员、售卖门店、销售时间、以及金额:
CREATE TABLE table11(
record_id int,
seller_id int,
store_id int,
sale_date date,
sale_amt bigint
) distributed BY hash(record_id)
properties("replication_num" = "1");
明细模型表table11中会保留所有的明细数据,我们自然可以进行任意维度的分析。举个例子,如果我们需要对不同门店的销售量做分析,那么SQL写法为:
SELECT store_id, SUM(sale_amt) FROM table11 GROUP BY store_id;
这时查询需要检索全表数据,现场聚合分组得出结果。
如果我们频繁需要进行这个查询,若每次都进行全表检索现场聚合,显然是比较浪费资源和耗时的。而若我们可以像在查询聚合模型一样直接获取聚合后的数据,显然查询会加速很多,这也正是我们使用物化视图主要目的。

文章介绍了StarRocks的物化视图特性,如何通过物化视图优化数据查询性能。物化视图允许预先计算并存储常用查询的结果,提高聚合查询的速度。在明细模型中,物化视图可以提供预聚合数据,而在聚合模型中,可以用来调整列顺序以利用前缀索引。文章还提到了物化视图的一些限制,如不支持JOIN、WHERE和HAVING子句,以及对单表创建过多物化视图可能影响导入效率等。
最低0.47元/天 解锁文章
2604

被折叠的 条评论
为什么被折叠?



