hive中的视图和doris的物化视图的区别
·
好的,我们来详细解释一下 Hive 中的视图和 Doris 中的物化视图的区别。这两者在概念和实现上有显著的不同:
1. Hive 中的视图
- 本质: 逻辑层定义。它本质上是一个存储的 SQL 查询语句。
- 存储: 不存储实际数据。它只是一个虚拟表。
- 数据计算: 每次查询视图时,底层的查询语句都会被执行。这意味着每次访问视图都需要重新计算其定义的结果。
- 性能: 查询性能取决于底层表的查询效率。对于复杂的视图,查询可能会很慢。
- 数据时效性: 视图中的数据总是最新的,因为它是在查询时实时计算的。
- 语法示例:
CREATE VIEW my_hive_view AS SELECT column1, column2, SUM(column3) AS total FROM my_table GROUP BY column1, column2; - 优点:
- 简化复杂查询:隐藏底层表结构的复杂性。
- 提供逻辑数据抽象层。
- 不占用额外存储空间(只存储查询定义)。
- 缺点:
- 查询性能可能较差,特别是对于复杂视图或大数据集。
- 每次查询都需要计算开销。
2. Doris 中的物化视图
- 本质: 物理层存储。它不仅存储查询定义,更重要的是预先计算并存储了查询结果。
- 存储: 存储实际计算好的数据。它是一个物理表。
- 数据计算: 数据是在创建物化视图时或根据设定的策略(如增量更新)预先计算好的。查询视图时直接读取这些预计算结果。
- 性能: 查询性能通常非常高,因为不需要实时计算,直接读取预计算好的结果即可。这对于聚合查询尤其有效。
- 数据时效性: 数据的时效性取决于物化视图的刷新策略(全量刷新、增量刷新)。它不是完全实时的,但 Doris 的物化视图支持高效的增量更新,延迟通常很低。
- 语法示例:
CREATE MATERIALIZED VIEW my_doris_mv BUILD IMMEDIATE -- 立即开始构建 REFRESH FAST ON DEMAND -- 按需快速刷新(增量) AS SELECT column1, column2, SUM(column3) AS total FROM my_table GROUP BY column1, column2; - 优点:
- 查询性能极佳,响应速度快。
- 显著减少复杂聚合查询的计算开销。
- 支持自动查询重写:当用户查询基表时,如果存在匹配的物化视图,Doris 查询优化器会自动重写查询去读取物化视图的数据。
- 缺点:
- 占用额外的存储空间。
- 数据并非完全实时(取决于刷新策略)。
- 创建和维护物化视图本身需要计算资源和时间。
总结对比
| 特性 | Hive 视图 | Doris 物化视图 |
|---|---|---|
| 存储 | 仅存储查询定义 (逻辑) | 存储查询定义 和 计算结果 (物理) |
| 数据计算时机 | 每次查询时实时计算 | 预先计算(创建/刷新时) |
| 查询性能 | 较慢(依赖底层计算) | 非常快(直接读取预计算结果) |
| 数据时效性 | 实时(查询时计算) | 近实时(取决于刷新策略) |
| 额外存储开销 | 很小(仅 SQL 定义) | 有(存储预计算结果) |
| 维护成本 | 低 | 中高(需要计算资源和刷新) |
| 自动查询重写 | 一般不支持 | 支持 |
| 主要目的 | 简化查询、逻辑抽象 | 加速查询(尤其聚合) |
简单来说:
- Hive 视图就像一个快捷方式(指向一个查询),每次用这个快捷方式都会重新运行一遍查询。
- Doris 物化视图就像一个提前准备好的答案(存储了查询结果),当有人问相同问题时,直接把这个答案拿出来用,速度非常快。但这个答案需要定期更新以保证相对的新鲜度。
更多推荐


所有评论(0)