OracleOLAP如何使用MV
Cube在Oracle数据库中的应用非常广泛,特别是在产生交叉报表的情况。OracleOLAP使用MView刷新cube的方法是比较常用的。
我们用Oracle数据库创建了一个cube ,这时cube 里面的数据只有在我们手工执行。
dbms_cube。build(‘’) 才会被刷新。
比如你在前面已经建立好了global 的price_cube , 并且执行了第一次dbms_cube。build(‘price_cube’) 你才能查询到数据。 比如执行以下sql:
select * from table(cube_table(’price_cube’))
where produc...全部
Cube在Oracle数据库中的应用非常广泛,特别是在产生交叉报表的情况。OracleOLAP使用MView刷新cube的方法是比较常用的。
我们用Oracle数据库创建了一个cube ,这时cube 里面的数据只有在我们手工执行。
dbms_cube。build(‘’) 才会被刷新。
比如你在前面已经建立好了global 的price_cube , 并且执行了第一次dbms_cube。build(‘price_cube’) 你才能查询到数据。
比如执行以下sql:
select * from table(cube_table(’price_cube’))
where product=’ITEM_ENVY STD’
and time=’MONTH_1998。
01′;
此时输出如下 (注意大小写,下划线和空格):
unit_cost
unit_price
time
product
3346。85
3480。92
MONTH_1998。01
ITEM_ENVY STD
现在我们手工更新price_fact 表的这条数据(price_cube 的实际数据来源),
update price_fact set unit_price=9999
where month_id=1998。
01 and item_id=’ENVY STD’;
1 rows updated
现在重新查看price_cube 的数据,你会发现跟刚才的一样, unit_price 还是等于3480。92 , 而不是随着price_fact 表的数据更新到9999。
启用Cube MView
刷新数据的前提条件
如果你希望你的cube 随着实体表的更新而刷新的话(不一定要是同步), 你就需要把cube 设置成按mv 方式来组织。 不过首先你需要满足以下几个条件:
1。
所有的dimension 必须至少有一个level 和 hierarchy。
2。所有的dimension 必须使用同一种聚合操作, sum,min,max 等等。
3。一个cube 的所有属性必须正确的映射到实体表。
一个cube 可以有calculated measures , 但是不能映射到mv , 如果一个cube 的脚本中有高级分析函数也不能映射。
4。dimension 和fact table 之间必须要有约束。
至少是外键约束。 如果你没有定义,你可以在启用mv 的时候用Relational Schema Advisor 帮你映射。
5。所有的表上的约束必须同一类型。
6。cube 被压缩了。
7。为了更好的使用query rewrite , 你应该创建relational dimension 对象。
关于第二点,otn 上给的global_schema 的price_cube 的聚合操作就不是同一的sum 操作,所以你启用MView 刷新的时候会报错,注意根据错误信息调整。
关于第三点, calculated measure 支持的分析函数:
除了在第一个文件夹 简单算术 文件夹下的六个(+,-,×,/,%) , 其他都算高级分析函数。
关于第四点,fact table 和dimension table 之间至少要有外键约束,这应该是建模标准之一,如果不是多维数据集 比如11g 之前的类型,你可以方便的在外键之间建立组合索引。
对于11g 的cube 类型来说,必须需要至少外键约束。
关于第六点,默认的用awm 创建的cube 里面的是没有指定压缩类型和压缩比率的,只有在第一次刷新之后,再启用MView 刷新的时候才能选择压缩选项。
awm 里面有提示,注意参考提示信息。
关于第七点最重要, 所谓relational dimension 就是我们通过create dimension 创建的对象。而我们之前说的dimension 一般都是指cube dimension ,它指的是在analysis workspace 里面的dimension 对象。
relational dimension 你可以通过查看dba_dimensions 视图查看。 主要用来控制mv query rewrite 的。
cube dimension 可以通过查看dba_cube_dimensions 视图查看。
另外两个跟aw 相关的视图是dba_cubes 和dba_aws ,
11g 有一些新的跟aw 相关的试图,你可以查看
SELECT * FROM dba_objects WHERE object_name LIKE ‘%AW%’;
其中包括了dimension 和cube 的元数据,dimension 和cube 的统计图信息(analyze 之后收集的), dimension 和cube mv 的元数据, cube 的分区建议和储存建议。
具体查看oracle 11g 的文档。
默认的你创建cube 的时候,它会创建对应的relational dimension (awm 里面是这样, 手工从pl/sql 里面创建没试过),你可以删除relational dimension ,cube 里面的dimension 是不会跟着删除的。
relational dimension的一些操作:
查看dimension 的pl/sql
exec dbms_dimension。describe_dimension('global。product_dimension');。
收起