Lakehouse 视图与物化视图指南

概述

视图(View)和物化视图(Materialized View)是封装复杂查询逻辑、简化数据访问的重要工具。视图是虚拟表,查询时动态计算;物化视图预计算并存储结果,支持查询改写加速。本指南按业务场景分类,帮助你快速掌握视图的创建与管理方法。

涉及的 SQL 命令

命令用途适用场景
CREATE VIEW
CREATE VIEW
创建逻辑视图封装 JOIN/聚合,简化查询
CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW
创建物化视图预计算高频查询结果
REFRESH MATERIALIZED VIEW
REFRESH MATERIALIZED VIEW
刷新物化视图更新预计算数据
DROP VIEW
DROP VIEW
/
DROP MATERIALIZED VIEW
DROP MATERIALIZED VIEW
删除视图清理废弃视图

前置准备

以下示例使用模拟的销售明细表

sales_detail
sales_detail

-- 创建源表 CREATE TABLE IF NOT EXISTS sales_detail ( sale_id INT, product_id INT, region STRING, amount DOUBLE, sale_date DATE ); -- 插入测试数据 INSERT INTO sales_detail VALUES (1, 101, 'East', 5000, '2024-06-01'), (2, 102, 'West', 3000, '2024-06-01'), (3, 101, 'East', 5000, '2024-06-02');


创建普通视图

使用

CREATE VIEW
CREATE VIEW
定义逻辑视图。视图不存储数据,查询时动态执行底层 SQL。

-- 创建按区域汇总的视图 CREATE VIEW v_region_sales AS SELECT region, COUNT(*) as sale_count, SUM(amount) as total_amount FROM sales_detail GROUP BY region;

使用视图

SELECT * FROM v_region_sales ORDER BY total_amount DESC;

结果说明

regionsale_counttotal_amount
East210000
West13000

创建物化视图

使用

CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW
创建预计算视图。物化视图会存储实际数据,查询时可被优化器自动改写使用。

-- 创建按日期汇总的物化视图 CREATE MATERIALIZED VIEW mv_daily_sales AS SELECT sale_date, SUM(amount) as daily_total FROM sales_detail GROUP BY sale_date;

查询物化视图

SELECT * FROM mv_daily_sales ORDER BY sale_date;

结果说明

sale_datedaily_total
2024-06-018000
2024-06-025000

刷新物化视图

当源表数据发生变化时,使用

REFRESH MATERIALIZED VIEW
REFRESH MATERIALIZED VIEW
更新物化视图。

-- 向源表插入新数据 INSERT INTO sales_detail VALUES (4, 103, 'South', 4000, '2024-06-03'); -- 刷新物化视图 REFRESH MATERIALIZED VIEW mv_daily_sales; -- 验证刷新结果 SELECT * FROM mv_daily_sales WHERE sale_date = '2024-06-03';

结果说明

sale_datedaily_total
2024-06-034000

查询改写验证

Lakehouse 优化器会自动将针对源表的查询改写为查询物化视图,从而加速响应。

-- 直接查询源表(优化器可能自动改写为查询 mv_daily_sales) SELECT sale_date, SUM(amount) as total FROM sales_detail GROUP BY sale_date;


删除视图

使用

DROP VIEW
DROP VIEW
DROP MATERIALIZED VIEW
DROP MATERIALIZED VIEW
删除视图。

-- 删除普通视图 DROP VIEW v_region_sales; -- 删除物化视图 DROP MATERIALIZED VIEW mv_daily_sales;


清理测试数据

完成视图验证后,建议清理测试表:

-- 删除测试表 DROP TABLE IF EXISTS sales_detail;


注意事项

  1. 视图依赖:删除源表会导致依赖它的视图失效。请使用
    DESC VIEW
    DESC VIEW
    查看依赖关系。
  2. 物化视图刷新:物化视图默认不自动刷新。对于需要近实时数据的场景,建议使用 Dynamic Table。
  3. 查询改写条件:优化器仅在物化视图的聚合维度与查询完全匹配时才会改写。
  4. 存储成本:物化视图会占用额外存储空间,大小与预计算结果集成正比。
  5. DROP 语法:删除物化视图必须使用
    DROP MATERIALIZED VIEW
    DROP MATERIALIZED VIEW
    ,不能使用
    DROP VIEW
    DROP VIEW

相关文档

联系我们
预约咨询
微信咨询
电话咨询