物化视图(Materialized View)和视图(View)类似,也是一个视图名字对应一个SQL查询查询语句。不同之处在于:物化视图定义时使用了额外的关键字materialized, 它把结果集保存在起来,查询的时候直接读取保存的结果集,而不必扫描原始表。物化视图的结果集(即物化视图自己的数据)的存储和扫描方式和普通表的方式相同。
创建测试表
---- 创建测试表
drop table if exists DIM_OFFER;
create table DIM_OFFER
(
OFFER_ID numeric(20) DEFAULT NULL,
OFFER_TYPE varchar(100) DEFAULT NULL,
PAY_TYPE varchar(2) DEFAULT NULL,
TRADEMARK varchar(20) DEFAULT NULL,
BUSI_TYPE varchar(6) DEFAULT NULL,
OFFER_PLAN_TYPE varchar(6) DEFAULT NULL,
PROD_SPECID varchar(20) DEFAULT NULL,
PACKED_FLAG varchar(6) DEFAULT NULL,
IS_GLOBAL varchar(6) DEFAULT NULL,
DAILY_EFFECT varchar(6) DEFAULT NULL,
STOP_DISPOSE varchar(6) DEFAULT NULL,
MODIFY_DATE varchar(20) DEFAULT NULL,
MODIFIER varchar(20) DEFAULT NULL,
CREATE_DATE varchar(20) DEFAULT NULL,
CREATER varchar(20) DEFAULT NULL,
DEL_FLAG varchar(2) DEFAULT NULL,
PRIMARY KEY(OFFER_ID)
);
select create_reference_table('DIM_OFFER');
创建物化视图
---- 创建物化视图
SELECT run_command_on_workers($cmd$
drop MATERIALIZED VIEW if exists dim_offer_v;
create MATERIALIZED VIEW dim_offer_v
AS
select OFFER_ID,OFFER_TYPE,PAY_TYPE,TRADEMARK,BUSI_TYPE,OFFER_PLAN_TYPE,PROD_SPECID from DIM_OFFER;
$cmd$);
创建索引
SELECT run_command_on_workers($cmd$
create unique index index_dim_offer_v_offer_id ON dim_offer_v ( OFFER_ID );
$cmd$);
加载数据
---- 导入数据
\COPY DIM_OFFER FROM '/home/postgres/work/Predeal/data/bak/offer.20221210.csv' WITH (DELIMITER ',');
刷新物化视图
---- 刷新物化视图
SELECT run_command_on_workers($cmd$
REFRESH MATERIALIZED VIEW concurrently dim_offer_v with data;
$cmd$);
删除数据后视图更新验证
删除一条数据
更新视图
查询视图数据是否删除