缓存可以大大提高查询速度,没进行一次新的查询,就会自动创建一个新的缓存文件。当物理表发生改变的时候通知BI Server,例如表A,我们需要通知BI Server删除和表A相关的缓存文件(文件存在于OracleBIData/cache),当然可以通过Cache Manager手动更新。不过BIEE也提供了一种自动更新的方式,就是缓存轮询事件表。
基本工作原理就是, BI Server维护着一个或者多个缓存轮询事件表,可以设置间隔多长时间检测一次这个表,删除和该表有关的缓存。
闲话不多说,在数据仓中创建表UET,表名无所谓,关键是表的列的顺序和数据类型。
列名 | 类型 | 默认值 | 是否为空 | 说明 |
UPDATETYPE | INTEGER | 1 | 否 | |
UPDATETIME | DATETIME | TIMESTAMP | 否 | |
DBNAME | VARCHAR | 是 | ||
CATALOGNAME | VARCHAR | 是 | ||
SCHEMANAME | VARCHAR | 是 | ||
TABLENAME | VARCHAR | 否 | 待清缓存的表名 | |
OTHER | VARCHAR | 是 | 预留字段 |
另外需要提醒的是,官方文档里面提到的表的顺序是错误的,而它给出的创建示例却是正确的。
本人用的Oracle10R2,给出创建示例
create table UET
(
UPDATETYPE NUMBER default 1 not null,
UPDATETIME DATE default SYSDATE not null,
DBNAME VARCHAR2(40),
CATALOGNAME VARCHAR2(40),
SCHEMANAME VARCHAR2(40),
TABLENAME VARCHAR2(40) not null,
OTHER VARCHAR2(80)
);
以下就是将UET设置为缓存轮询事件表——所谓的激活该表吧。
在biee的admintool中,将刚才创建的UET表import 到Repository的Physical层中;
菜单 –> Tools –> Utilies, 选择Oracle BI Event Tables然后点击’Execute’
选择UET然后点击 >> 将UET放入Event Tables列表中
设置轮询频率(分钟),即多长时间检查Event Tables列表中的事件表。
OK,自己测试通过(在UET中插入一条表名为XXX的记录,设置轮询频率20分钟,在Dashboard中查询和XXX有关的记录——直接查询或者预览都可以,
可以看到在OracleBIData/cache下有很多tbl类型文件生成,轮询表生效后,和XXX相关的tbl文件都自动删除的,无关的保留着)。
------------------
关于维护Event Tables,一般是在装载的过程中,将发生变化的表名插入一条记录到UET中。轮询的时候,会将已经生效的表名从UET中删除
[参考]Oracle Business Intelligence Server Administration Guide.Cache Event Processing with an Event Polling Table (Page 248)