设为首页 加入收藏

TOP

解析OracleOLAP使用MView刷新Cube(一)
2014-11-24 08:26:04 来源: 作者: 【 】 浏览:5
Tags:解析 OracleOLAP 使用 MView 刷新 Cube

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);

 输出:
  DIMENSION GLOBAL.PRODUCT_DIMENSION
  LEVEL FAMILY IS GLOBAL.PRODUCT_DIM.FAMILY_ID
  LEVEL ITEM IS GLOBAL.PRODUCT_DIM.ITEM_ID
  LEVEL TOTAL IS GLOBAL.PRODUCT_DIM.TOTAL_ID
  LEVEL class IS GLOBAL.PRODUCT_DIM.CLASS_ID
  ATTRIBUTE FAMILY LEVEL FAMILY DETERMINES GLOBAL.PRODUCT_DIM.FAMILY_DSC
  ATTRIBUTE ITEM LEVEL ITEM DETERMINES GLOBAL.PRODUCT_DIM.ITEM_DSC
  ATTRIBUTE TOTAL LEVEL TOTAL DETERMINES GLOBAL.PRODUCT_DIM.TOTAL_DSC
  ATTRIBUTE class LEVEL class DETERMINES GLOBAL.PRODUCT_DIM.CLASS_DSC
  启用cube MView 刷新
  实际启用cube mv 刷新是很简单的, 主要是前提条件都满足了, 在awm 的cube 里面Materialized Views 选项卡里面点击 Enable Materalized View 选项和 Enable Query Rewrite 选项。
  刷新模式有Complete , Fast ,Force 。其他可选方法还有PCT (Partition Change Tracking) 和Fast Solve;
  1. Complete 全部删除再全部装载。
  2. Fast 使用mv log 记录变化的记录,并且只更新这些记录和对应的聚合记录。
  3. Force- 默认使用fast, 如果fast 不可用,才使用complete。
  4. Partition Change Tracking: 只刷新部分分区的数据,这在awm 里面没有。
  5. Fast Solve: 加载所有的原始数据,但是只计算新数据的聚合值,awm 里面没有。
  mv不会计算calculated measures , 并且随着mv 的体积增大,创建和刷新的速度会

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇SQL SERVER中判断某个字段是否包.. 下一篇MySQL中ROLLUP的替代方法

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis压力测试实战 - (2025-12-27 09:20:24)
·高并发一上来,微服 (2025-12-27 09:20:21)
·Redis 高可用架构深 (2025-12-27 09:20:18)
·Linux 系统监控 的完 (2025-12-27 08:52:29)
·一口气总结,25 个 L (2025-12-27 08:52:27)