目录
1.优势
2.局限性
3.管理物化视图
3.1 创建测试表
3.2创建物化视图
3.3查询物化视图
3.4删除物化视图
3.5支持聚合函数
4.自动匹物化视图
4.1.总数据量
4.2.可以使用EXPLAIN检查sql是否使用物化视图
4.3.统计各省年度数据
4.4.统计某年各月数据
物化视图是将预先计算(根据定义好的 SELECT 语句)好的数据集,存储在 Doris 中的一个特殊的表。物化视图的出现主要是为了满足用户,既能对原始明细数据的任意维度分析,也能快速的对固定维度进行分析查询。
CREATE TABLE `dim_nucleic_duplicate` (
`id` bigint(20) NOT NULL,
`idcard` varchar(50) NULL,
`name` varchar(255) NULL,
`mobile` varchar(50) NULL,
`pcode` varchar(3) NULL COMMENT '省份编码',
`ccode` varchar(3) NULL COMMENT '地市编码',
`acode` varchar(3) NULL COMMENT '区县编码',
`tcode` varchar(3) NULL COMMENT '街道/乡镇编码',
`vcode` varchar(3) NULL COMMENT '社区/行政区编码',
`sid` bigint(20) NULL COMMENT '采样点id',
`stime` datetime NULL COMMENT '采样时间',
`sname` varchar(255) NULL COMMENT '采样点名称',
`did` bigint(20) NULL COMMENT '检测机构id',
`dname` varchar(255) NULL COMMENT '检测机构名称',
`dtime` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '检测时间',
`result` int(11) NULL COMMENT '检测结果:0未出结果,1阴,2阳'
)
DUPLICATE KEY(`id`,`idcard`,`name`,`mobile`,`pcode`,`ccode`,`acode`,`tcode`,`vcode`,`sid`,`stime`)
PARTITION BY RANGE(`stime`) ()
DISTRIBUTED BY HASH(`pcode`,`ccode`,`acode`,`tcode`,`vcode`) BUCKETS auto
PROPERTIES
(
"dynamic_partition.enable" = "true",
"dynamic_partition.time_unit" = "MONTH",
"dynamic_partition.create_history_partition" = "true",
"dynamic_partition.history_partition_num" = "21",
"dynamic_partition.end" = "3",
"dynamic_partition.prefix" = "dim_nucleic_p"
)
创建五级行政区核酸采用数据月度统计物化视图:
create materialized view dim_nucleic_area as
select pcode,ccode,acode,tcode,vcode,year(stime),month(stime),count(id) from dim_nucleic_duplicate group by pcode,ccode,acode,tcode,vcode, year(stime),month(stime);
提示成功后,由于数据量大,可能不会马上创建成功,可使用以下命令查看创建结果:SHOW ALTER TABLE MATERIALIZED VIEW FROM db_name;
当创建物化视图任务的 State 已经变成 FINISHED 后,就说明这个物化视图已经创建成功了。
查看当前表都有哪些物化视图,以及他们的表结构都是什么样的。通过下面命令:
desc table_name all;查看已创建的物化视图:
SHOW CREATE MATERIALIZED VIEW mv_name ON table_name 查看详细的创建信息:
DROP MATERIALIZED VIEW mv_name ON table_name
目前物化视图创建语句支持的聚合函数有:
SUM, MIN, MAX (Version 0.12)
COUNT, BITMAP_UNION, HLL_UNION (Version 0.13)
select count(*) from dim_nucleic_duplicate
dim_nucleic_duplicate表中共 445277354 条数据。
EXPLAIN
select pcode,count(id) as nums from dim_nucleic_duplicate where year(stime)=2022 group by pcode order by pcode
最后一行中的dim_nucleic_area表示命中视图。
1)不使用物化视图:
select pcode,count(id) as nums from dim_nucleic_duplicate where stime BETWEEN '2022-01-01' and '2022-12-31 23:59:59' group by pcode order by pcode
2)使用物化适配:
select pcode,count(id) as nums from dim_nucleic_duplicate where year(stime)=2022 group by pcode order by pcode
3)统计耗时
统计各省年度数据,不使用物化视图花费2.98s,使用物化视图花费0.14s,物化视图优势明显。
1)不使用物化视图:
select month(stime),count(id) as nums from dim_nucleic_duplicate where stime BETWEEN '2022-01-01' and '2022-12-31 23:59:59' group by month(stime) order by month(stime)
2)使用物化视图:
select month(stime),count(id) as nums from dim_nucleic_duplicate where year(stime)=2022 group by month(stime) order by month(stime)
3)统计耗时
统计某年各月数据,不使用物化视图花费3.19s,使用物化视图花费0.11s,物化视图优势明显。