1. 异步物化视图可以支持 schema change 吗?
物化视图使用的基表支持 schema change 变更,物化视图的 schema 不会自动变更,除非重新创建物化视图。
对物化视图本身 schema 来说,目前不支持修改,因为物化视图的列属性是根据物化视图定义 SQL 推导出来的。目前不支持显示的自定义修改。
2. 异步物化视图更新会不会不及时,能不能根据执行计划自动使用物化视图
1)更新会不会不及时
异步物化视图的数据和基表的数据会存在一定的延迟,如果想保持一致,对于内表可以设置 grace_period 属性,grace_period 属性介绍见官方文档:query-async-materialized-view
对于外表,目前无法检测数据是否变化,所以无法保证及时更新,后续迭代如果支持监测外表数据变化,就可以使用 grace_period 机制来保证数据的实时性。
2)是否可以自动使用
Doris 可以分析查询 SQL 的结构信息,自动寻找满足要求的物化视图,并尝试进行透明改写,使用最优的物化视图来表达查询SQL。
3. 主键模型的物化视图应用,具体如何应用?
异步物化视图没限制基表的数据模型,异步物化视图是根据物化视图定义 SQL,周期或者手动地刷新物化视图数据。
4. 物化视图改写,如果基表一直在变,那查询改写是不是会不会导致数据不正确
异步物化视图一般适用于基表数据不频繁变化的场景,比如使用 t + 1 的基表来构建物化视图。
如果物化视图使用的基表数据一直在变化。对于是内表的基表,grace_period 可以设置大于0,如果数据变化的延迟在 grace_period 内,那么也是可以进行透明改写的。
对于是外表的基表,目前感知不到外表的数据变更,所以外表数据变更也是进行透明改写的,后面迭代会逐步支持感知外表的数据变更。
目前透明改写有将查询和物化union的机制,开关是enable_materialized_view_union_rewrite,默认关闭,这个机制是当物化视图是分区的物化视图,如果查询使用的分区不在物化视图中,或者失效了,可以通过 union 物化视图和基表来保证数据的一致性。
5. 异步物化未来可以修改“列名 ”吗?
不可以。olap table 也不支持修改列名,物化视图这里和 olap table 保持一致。
6. 异步物化视图在 读取外表作为基表 和 读取内表作为基表 的执行效率对比怎样?大概有多大的差异呢?
异步物化视图在构建阶段会根据物化视图 SQL定义构建刷新物化视图的数据,异步物化视图的数据存储在内表。
对于构建阶段,读取外表和内表数据的性能是有差别的,本质上是外表和内表的数据扫描性能差异。
todo贴下内外表的数据扫描性能对比。
对于查询阶段,查询物化视图和查询内表性能基本一致。
7. 异步物化视图如果执行失败,用户侧目前可以感知得到吗?如果没有,未来有计划支持吗?
通过Select * from tasks(type="mv");来查询。参考文档:https://doris.apache.org/zh-CN/docs/dev/sql-manual/sql-functions/table-functions/tasks
8. 异步物化视图上还能建索引吗?
2.1.3 版本开始支持
9. 刷新的时候会锁表吗?
很小的阶段会锁表,不会持续的占用表锁(几乎等同于导入数据的锁表时间)
10. 基表和外表关联查询 算子都支持吗?
构建物化视图支持。
透明改写有限制,目前的限制见官网文档:query-async-materialized-view
11. 分区增量刷新时候,视图的分区字段有什么约束吗?比如是否要求基表必须有同样粒度同类型的分区字段等等
视图的分区字段约束,请参考:CREATE-ASYNC-MATERIALIZED-VIEW
目前要求同粒度,将来会支持物化视图的分区上卷,例如基表按天分区,物化视图按月分区。
12. period 能为0吗
默认值是0,具体的机制见文档:query-async-materialized-view
13. 物化视图支持 with语法吗
构建的时候没有限制。
使用 with 的物化视图也支持透明改写。在查询中,如果with后的视图使用单次,可以展开,和普通的查询基本一致,支持透明改写。如果with后的视图使用多次,会引用视图,透明改写会有影响。
14. 物化视图还能作为基表再做物化视图吗?
2.1.3 已经支持。物化视图的SQL定义,可以继续使用物化视图,对于透明改写,也支持使用包含物化视图的物化视图来透明改写,嵌套改写的开关是enable_materialized_view_nest_rewrite,默认关闭。
15. 物化视图能嵌套几层?
没有限制,但是透明改写的性能会有一定影响,推荐 3 层以内。
16. 异步物化视图适合做星型模型的 join 事实表吗?
比较适合只有一个事实表,然后按照事实表进行分区更新。
可以基于星型模型构建物化视图,并且设置对应的主外键信息。
此物化视图可直查。当查询事实表和物化视图中部分维表时,如果满足 join 消除条件时,可以使用此物化视图来响应查询。
17. Hive 外表如何确保获取到分区的更新事件?
目前外表需要手动刷新对应的分区,或者全量刷新。
18. 异步物化视图适合近实时场景吗?
不太适合,异步物化视图的数据和基表会有一定延迟。
目前透明改写有将查询和物化union的机制,开关是enable_materialized_view_union_rewrite,默认关闭,这个机制是当物化视图是分区的物化视图,如果查询使用的分区不在物化视图中,或者失效了,可以通过 union 物化视图和基表来保证数据的一致性。
19. join的物化视图支持增量更新吗?(文档指的是官方文档吗)
支持分区粒度的刷新。
分区增量更新的限制见 Doris 官方文档:CREATE-ASYNC-MATERIALIZED-VIEW
20. 物化视图支持关联吗?
2.1.3 版本已支持
21. 异步导入任务增加异步回调通知机制?
可以参考 databend 的通知机制,这样可以更自动化的完成一些动作。