物化视图(Materialized View)本质是一种预计算,即把某些耗时的操作(例如JOIN、AGGREGATE)的结果保存下来,以便在查询时直接复用,从而避免这些耗时的操作,最终达到加速查询的目的。本文为您介绍物化视图相关命令。
使用限制
仅Hologres V1.3及以上版本支持物化视图,如果您的实例是V1.3以下版本,请您使用自助升级或加入Hologres钉钉交流群反馈,详情请参见如何获取更多的在线支持?。
说明
更多使用限制和操作请参见SQL管理物化视图。
创建物化视图
命令语法。
创建物化视图的语法格式如下。
CREATE MATERIALIZED VIEW <mv_name> AS <QUERY BODY>;
mv_name为自定义物化视图名称;QUERY BODY为查询语句,详情请参见SELECT。
使用示例。
非分区表创建物化视图。
BEGIN; CREATE TABLE base_sales( day text not null, hour int , ts timestamptz, amount float, pk text not null primary key ); CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'appendonly'); --当实时物化视图被Drop后,可以取消明细表的appendonly属性,执行以下命令 --CALL SET_TABLE_PROPERTY('base_sales', 'mutate_type', 'none'); CREATE MATERIALIZED VIEW mv_sales AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales GROUP BY day, hour; COMMIT; insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),100,'pk1'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),200,'pk2'); insert into base_sales values(to_char(now(),'YYYYMMDD'),'12',now(),300,'pk3');
分区表创建物化视图。
BEGIN; CREATE TABLE base_sales_p( day text not null, hour int, ts timestamptz, amount float, pk text not null, primary key (day, pk) ) partition by list(day); CALL SET_TABLE_PROPERTY('base_sales_p', 'mutate_type', 'appendonly'); --day是分区列,要出现在视图的group by的条件中 CREATE MATERIALIZED VIEW mv_sales_p AS SELECT day, hour, avg(amount) AS amount_avg FROM base_sales_p GROUP BY day, hour; COMMIT; create table base_sales_20220101 partition of base_sales_p for values in('20220101');
查询物化视图
您可以使用如下SQL查看已经创建的物化视图。
SELECT * FROM mv_sales WHERE day = to_char(now(),'YYYYMMDD') AND hour = 12;
删除物化视图
命令语法。
删除视图的语法格式如下。
DROP MATERIALIZED VIEW <mv_name>;
mv_name为物化视图名称。
使用示例。
DROP MATERIALIZED VIEW mv_sales;
文档内容是否对您有帮助?