利用维对象来优化数据仓库的高级技巧
2007-05-06 12:05:52 来源:WEB开发网核心提示:在Oracle的数据仓库(OLAP)中,实体化视图(MVIEW),利用维对象来优化数据仓库的高级技巧,查询重写(Query Rewrite)和维(Dimension)是非常重要的优化手段,对于前两者我不想在这儿重复讲了, 还要给予Query Rewrite,Create Materialized View,主要来体验一
在Oracle的数据仓库(OLAP)中,实体化视图(MVIEW),查询重写(Query Rewrite)和维(Dimension)是非常重要的优化手段,对于前两者我不想在这儿重复讲了,主要来体验一下维的作用。要发挥维的作用,还是需要用到前面两者,下面是我设计的只有一个维表的最简单的例子。数据库用户除了connect, resource外, 还要给予Query Rewrite,Create Materialized View,Create Dimension权限。
1、创建一个维护表
CREATE TABLE TIME_DIM
AS
SELECT TO_CHAR(SYSDATE+ROWNUM,'YYYY') F_YEAR,
TO_CHAR(SYSDATE+ROWNUM,'YYYY-Q') F_QUATER,
TO_CHAR(SYSDATE+ROWNUM,'YYYY-MM') F_MONTH,
TRUNC(SYSDATE+ROWNUM,'DD') F_DAY
FROM DBA_OBJECTS
WHERE ROWNUM < 1000;
ALTER TABLE TIME_DIM MODIFY F_YEAR NOT NULL;
ALTER TABLE TIME_DIM MODIFY F_QUATER NOT NULL;
ALTER TABLE TIME_DIM MODIFY F_MONTH NOT NULL;
ALTER TABLE TIME_DIM MODIFY F_DAY NOT NULL;
ALTER TABLE TIME_DIM ADD PRIMARY KEY (F_DAY);
2、创建一个事实表
CREATE TABLE FACT_SALES
AS
SELECT TRUNC(SYSDATE+ROWNUM,'DD') F_DAY,
TRUNC(DBMS_RANDOM.VALUE * 10000,2) M_AMOUNT1,
TRUNC(DBMS_RANDOM.VALUE * 10000,2) M_AMOUNT2
FROM DBA_OBJECTS
WHERE ROWNUM < 1000;
-- Please execute the following insert multiple times
INSERT INTO FACT_SALES
SELECT F_DAY,
TRUNC(DBMS_RANDOM.VALUE * 10000,2) M_AMOUNT1,
TRUNC(DBMS_RANDOM.VALUE * 10000,2) M_AMOUNT2
FROM FACT_SALES
/
ALTER TABLE FACT_SALES MODIFY F_DAY NOT NULL;
ALTER TABLE FACT_SALES ADD FOREIGN KEY (F_DAY) REFERENCES TIME_DIM(F_DAY);
3、将数据按月份进行汇总生成中间表
更多精彩
赞助商链接