你的位置:NOGS中文网 > 0x0.ai中文网 > >在Hologres中如何使用物化视图
热点资讯
0x0.ai中文网

在Hologres中如何使用物化视图

发布日期:2025-01-04 11:29    点击次数:81

实时物化视图将对明细表的数据进行预先聚合,存储为物化视图,通过查询物化视图,减少计算量,显著提升查询性能。本文为您介绍在Hologres中如何使用物化视图。使用限制当前实时物化视图不支持对明细表进行Delete或Update操作,所以需要将明细表设置appendonly属性,当前对明细表任何的Delete或Update操作会提示: Table XXX is append-only。Flink实时写入时mutateType也只支持InsertOrIgnore。当前不支持异步创建物化视图,需要创建明细表的同时创建基于该表的物化视图。当前仅支持单表的物化视图,不支持CTE、多表JOIN、子查询、不支持WHERE条件、ORDER BY、LIMIT、HAVING语句。实时物化视图的GROUP BY Key和Value都不支持表达式,比如不支持SUM(CASE WHEN COND THEN A ELSE B END)、SUM(col1 + col2)、GROUP BY date_trunc('hour', ts)。每张明细表最多创建10个物化视图,物化视图数量和资源消耗成正比。如果基于分区表创建物化视图,物化视图的GROUP BY Key必须包含分区表的分区列,且不能对分区表的子表创建物化视图,只能针对分区表父表创建。如果基于分区表创建物化视图,不支持ATTACH PARTITION至父表语法,支持CREATE TABLE PARTITION OF语法。对于创建了物化视图的明细表,暂不支持DROP COLUMN。物化视图的底层数据与明细表的TTL一致,不可以手动设置物化视图的TTL,否则会出现物化视图数据和明细表数据不一致的情况。支持的聚合函数SQL示例创建实时物化视图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');查询物化视图SELECT * FROM mv_sales WHERE day = to_char(now(),'YYYYMMDD') AND hour = 12;删除物化视图DROP MATERIALIZED VIEW mv_sales;查询物化视图占用存储空间select pg_relation_size('mv_sales');查询所有物化视图底层占用空间SELECT schemaname

上一篇:科普!各支职业车队的赞助商到底是干嘛的?
下一篇:newsletter221
友情链接: