简单来说,同步物化视图是单表的,数据同步更新,维护代价小。异步物化视图是多表的,数据异步刷新,因为刷新的有一些代价,所以也需要根据场景来判断最适合的
异步物化视图按照设置的刷新规则进行刷新,对于创建具有分区的异步物化视图,目前可以做到分区级别的增量刷新,不分区的异步物化视图每次是全量刷新。
目前异步物化视图的刷新主要通过 insert overwrite select 来实现,使用 REFRESH ASYNC 基表每次变动物化视图就刷新一次,如果异步物化视图没有设置分区或者单个分区数据量很大,当基表实时导入频繁变动,那么就会频繁触发物化视图刷新,刷新任务压力会很大,基表实时导入数据量大的场景推荐使用
ASYNC [START (<start_time>)] EVERY(INTERVAL <interval>) : 定时刷新模式 或 MANUAL : 手动刷新模式
tech.qimao.com/starrockszh…
创建物化视图
CREATE MATERIALIZED VIEW order_mv
DISTRIBUTED BY HASH(`order\_id`) REFRESH ASYNC
START('2022-09-01 10:00:00')
EVERY (interval 1 day)AS
SELECT order_list.order_id,sum(goods.price) as total
FROM order_list
INNER JOIN goods
ON goods.item_id1 = order_list.item_id2
GROUP BY order_id;`
```
Notice:
- 创建异步物化视图时必须至少指定分桶和刷新策略其中之一。
- 您可以为异步物化视图设置与其基表不同的分区和分桶策略,但异步物化视图的分区列和分桶列必须在查询语句中。
- 异步物化视图支持分区上卷。例如,基表基于天做分区方式,您可以设置异步物化视图按月做分区。
- 异步物化视图暂不支持使用 List 分区策略,亦不支持基于使用 List 分区的基表创建。
- 创建物化视图的查询语句不支持非确定性函数,其中包括 rand()、random()、uuid() 和 sleep()。
- 异步物化视图支持多种数据类型。
- 默认情况下,执行 CREATE MATERIALIZED VIEW 语句后,StarRocks 将立即开始刷新任务,这将会占用一定系统资源。
如需推迟刷新时间,请添加 REFRESH DEFERRED 参数。
- 异步物化视图刷新机制
- 目前,StarRocks 支持两种 ON DEMAND 刷新策略,即异步刷新(ASYNC)和手动刷新(MANUAL)。
- 在此基础上,异步物化视图支持多种刷新机制控制刷新开销并保证刷新成功率: