为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】:DM8 【操作系统】: 【CPU】: 【问题描述】*:DM8的物化视图是不是不支持分区,没找到相关说明,而且写了分区脚本测试了一下,报错。
查了下文档,貌似没有直接在物化视图上分区的语法。
但可以测试一下用分区预建表的方式来创建物化视图,看看是否能够满足需要。
不过这个有点怪,直接创建完物化视图后,需要刷一下才能把数据灌进去,按说默认是立即刷数据才对啊,搞不懂。。。
下面是我的测试过程:
--创建物化事务预建表,可以根据需要弄成分区表 CREATE TABLE MVTAB_SALESTEST( SALES_ID INT, SALEMAN CHAR(20), SALEDATE DATETIME, CITY CHAR(10) ) PARTITION BY LIST(city)( PARTITION p1 VALUES ('北京', '天津'), PARTITION p2 VALUES ('武汉', '长沙') ); --创建物化视图 CREATE MATERIALIZED VIEW MV_SALESTEST FOR MVTAB_SALESTEST ON PREBUILT TABLE --指定预建表 AS SELECT 1 AS SALES_ID,'AAA' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'北京' AS CITY UNION ALL SELECT 2 AS SALES_ID,'BBB' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'天津' AS CITY UNION ALL SELECT 3 AS SALES_ID,'CCC' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'天津' AS CITY UNION ALL SELECT 4 AS SALES_ID,'DDD' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'武汉' AS CITY UNION ALL SELECT 5 AS SALES_ID,'EEE' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'武汉' AS CITY ; --物化视图创建后直接查询无结果 SELECT * FROM MV_SALESTEST; --貌似需要刷一下才有数,不知道为啥 REFRESH MATERIALIZED VIEW MV_SALESTEST; --再查询就有数了 SELECT * FROM MV_SALESTEST; --查询预建表里也能找到数据 SELECT * FROM MVTAB_SALESTEST; --可以按分区查询预建表 SELECT * FROM MVTAB_SALESTEST PARTITION(P2); --但物化视图上不能挂分区子句,这句查询会报错 SELECT * FROM MV_SALESTEST PARTITION(P2);
查了下文档,貌似没有直接在物化视图上分区的语法。
但可以测试一下用分区预建表的方式来创建物化视图,看看是否能够满足需要。
不过这个有点怪,直接创建完物化视图后,需要刷一下才能把数据灌进去,按说默认是立即刷数据才对啊,搞不懂。。。
下面是我的测试过程:
--创建物化事务预建表,可以根据需要弄成分区表 CREATE TABLE MVTAB_SALESTEST( SALES_ID INT, SALEMAN CHAR(20), SALEDATE DATETIME, CITY CHAR(10) ) PARTITION BY LIST(city)( PARTITION p1 VALUES ('北京', '天津'), PARTITION p2 VALUES ('武汉', '长沙') ); --创建物化视图 CREATE MATERIALIZED VIEW MV_SALESTEST FOR MVTAB_SALESTEST ON PREBUILT TABLE --指定预建表 AS SELECT 1 AS SALES_ID,'AAA' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'北京' AS CITY UNION ALL SELECT 2 AS SALES_ID,'BBB' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'天津' AS CITY UNION ALL SELECT 3 AS SALES_ID,'CCC' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'天津' AS CITY UNION ALL SELECT 4 AS SALES_ID,'DDD' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'武汉' AS CITY UNION ALL SELECT 5 AS SALES_ID,'EEE' AS SALEMAN,CAST(NULL AS DATETIME) AS SALEDATE,'武汉' AS CITY ; --物化视图创建后直接查询无结果 SELECT * FROM MV_SALESTEST; --貌似需要刷一下才有数,不知道为啥 REFRESH MATERIALIZED VIEW MV_SALESTEST; --再查询就有数了 SELECT * FROM MV_SALESTEST; --查询预建表里也能找到数据 SELECT * FROM MVTAB_SALESTEST; --可以按分区查询预建表 SELECT * FROM MVTAB_SALESTEST PARTITION(P2); --但物化视图上不能挂分区子句,这句查询会报错 SELECT * FROM MV_SALESTEST PARTITION(P2);