Skip to content

Commit

Permalink
update sql docs
Browse files Browse the repository at this point in the history
  • Loading branch information
fengzhao committed Feb 6, 2025
1 parent f686168 commit d05cb43
Showing 1 changed file with 88 additions and 2 deletions.
90 changes: 88 additions & 2 deletions docs/olap/01.OLAP概述.md
Original file line number Diff line number Diff line change
Expand Up @@ -696,9 +696,19 @@ Mesa 为了解决上面提到的两个问题,提出了一个预聚合的存储

## 物化视图

物化视图是一种预先计算并存储的数据库对象,它基于基础表的数据生成。它类似于普通视图,但普通视图只是逻辑定义(不存储数据),而**物化视图会将查询结果实际存储在磁盘上**,当定义视图的时候,一般来说数据库只会存储该视图定义的查询语句
物化视图是一种预先计算并存储的数据库对象,它基于基础表的数据生成。它类似于普通视图,但普通视图只是逻辑定义(不存储数据),而 **物化视图会将查询结果实际存储在磁盘上**


| 特性 | 普通视图(View) | 物化视图(Materialized View) |
|----------------------|-------------------------------------------|------------------------------------------|
| **数据存储** | 不存储数据,仅保存查询定义 | 存储查询结果的实际数据 |
| **查询性能** | 每次查询都需要重新计算 | 直接从存储的数据中读取,性能更高 |
| **刷新机制** | 动态计算,无需刷新 | 需要定期或按需刷新以保持数据一致性 |
| **适用场景** | 动态查询,灵活调整 | 预计算结果,加速复杂查询 |
| **存储开销** | 无额外存储开销 | 需要额外存储空间来保存查询结果 |
| **实时性** | 实时反映基础表的变化 | 可能存在延迟,取决于刷新频率 |
| **支持的功能** | 不支持增量刷新、查询改写等 | 支持增量刷新、查询改写等功能 |


物化视图维护(materialized view maintenance)

Expand Down Expand Up @@ -783,11 +793,87 @@ SELECT region, total_sales FROM mv_sales_summary;

## 达梦物化视图

物化视图 (MATERIALIZED VIEW) 是目标表在特定时间点上的一个副本,占用存储空间,即将查询出来的数据存储在数据库中。当所依赖的一个或多个基表的数据发生更新,必须启用刷新机制才能保证数据是最新的。
物化视图 (MATERIALIZED VIEW) 是目标表在特定时间点上的一个副本,**要占用额外的存储空间,即将查询出来的数据存储在数据库**。当所依赖的一个或多个基表的数据发生更新,必须启用刷新机制才能保证数据是最新的。

物化视图可以用于数据复制(Data Replication),也可用于数据仓库缓存结果集以此来提升复杂查询的性能。





```SQL

SET SCHEMA DB_QHDATA_MACRO;

CREATE TABLE "DB_QHDATA_MACRO"."macro_index_data"
(
"rid" INT IDENTITY(42481576, 1) NOT NULL,
"index_code" VARCHAR(50) NOT NULL,
"occur_period" INT,
"occur_period_t" VARCHAR(20),
"occur_period_year" INT,
"occur_period_month" INT,
"area_code" VARCHAR(32) NOT NULL,
"dim_cal" VARCHAR(32),
"dim_dur" VARCHAR(32),
"dim_extra" VARCHAR(32),
"index_value" DECIMAL(38,8),
"unit_use" VARCHAR(50),
"label" INT NOT NULL,
"source_code" VARCHAR(100),
"update_time" TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP(),
"area_code_type" INT,
NOT CLUSTER PRIMARY KEY("rid", "label")
) STORAGE(USING LONG ROW, ON "MAIN", CLUSTERBTR) ;

COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.index_code IS '指标名称';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.occur_period IS '数据期';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.occur_period_t IS 'tableau专用数据期';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.occur_period_year IS '';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.occur_period_month IS '';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.area_code IS '区划代码';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.dim_cal IS '计算类型';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.dim_dur IS '时间特征';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.dim_extra IS '其他维度';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.index_value IS '绝对值';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.unit_use IS '库中使用单位';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.label IS '数据属性(1代表官方公布宏观数据,2代表中观数据)';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.source_code IS '数据来源';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.update_time IS '更新时间';
COMMENT ON COLUMN DB_QHDATA_MACRO.macro_index_data.area_code_type IS '区划代码类型(1-行政区 2-关区 3-片区 4-园区)';

COMMENT ON TABLE DB_QHDATA_MACRO.macro_index_data IS '宏观指标数据表';


-- 如果对这个表经常进行这类查询
SELECT
OCCUR_PERIOD,SUM(index_value)
FROM DB_QHDATA_MACRO.macro_index_data
WHERE index_code=? AND dim_extra=?
GROUP BY OCCUR_PERIOD ORDER BY occur_period DESC


-- 创建物化视图 mv_macro_index_data_summary
CREATE MATERIALIZED VIEW mv_macro_index_data_summary
ENABLE QUERY REWRITE -- 启用查询改写
REFRESH FAST ON COMMIT -- 增量刷新
AS
SELECT
index_code,
dim_extra,
OCCUR_PERIOD,
SUM(index_value) AS total_index_value
FROM DB_QHDATA_MACRO.macro_index_data
GROUP BY index_code, dim_extra, OCCUR_PERIOD
ORDER BY index_code, dim_extra, OCCUR_PERIOD DESC;

-- 在原始查询中,index_code 和 dim_extra 是动态参数(用 ? 表示)。为了支持任意组合的查询,物化视图需要包含所有可能的 index_code 和 dim_extra 组合。

-- 在物化视图 mv_macro_index_data_summary,能够显著提升涉及 index_code 和 dim_extra 过滤条件的查询性能。预计算按照三个字段分组后的聚合数据



```



0 comments on commit d05cb43

Please sign in to comment.