商業智能研究 (十三) oracle warehouse 一些基本概念
oracle warehouse 一些基本概念
先介紹一些基本的概念,為了后面介紹如何在oracle上使用materialized view + dimension 部署foodmart demo 的例子的時候做些背景介紹。數據倉庫不同與普通的OLTP 數據模型,它由兩種表組成:事實表(Fact table) , 維度表(Dimension Table)
Fact table : Fact table 主要儲存用戶實際感興趣的信息的表 . 事實表有多個維表的外鍵 , 事實表的主屬性可以定義成多個外鍵的集合 . 事實表的從屬性稱為事實(Fact)或者叫度量(Measure) ,它們一般都是數值或其他可以進行計算的數據.
Dimension table : Dimension table 就是我們需要分析的主題了,它主要表現層次結構,分類信息,比如Time,Product,
Customer,location ,dimension table 有時候又叫做lookup 或reference 表,dimension table 一般隨ETL過程緩慢的變化而變化的.它一般比較小,但是卻決定了數據庫的性能,因為我們要在fact table 和dimension table 做多種join 操作.
Star Schemas
星形模型之所以被稱作星形模型是因為它是由中心的一個或者多個事實表周圍圍繞一組維表組成。

materialized view
在oracle中,materialized view 是一個預先計算的,從fact table 和dimension table 做的聚合操作(不一定只有sum操作),view 是不儲存數據的,但是materialized view 是存儲數據的,它是oracle構建數據倉庫最重要的技術之一,主要是為了解決性能的問題,就象MOLAP 系統預先計算的cube 是一樣的.
dimension
dimension 是建立在dimension table 是上的,它只是一個概念的定義,主要定義level,category 的信息,它實際并不存儲任何的數據,數據仍然是在dimension table中的,dimension 主要是為了配合materialized view 來解釋數據的層次關系,也是為了解決性能問題的.
為了在oracle中使用materialized view ,用戶必須有create materialized view 的權限.
為了使materialized viwe 發揮作用,兩個參數必須先定義:
QUERY_REWRITE_ENABLED=TRUE;
QUERY_REWRITE_INTEGRITY=TRUSTED;
materialized view 主要可以減少物理的讀寫次數,減少CPU的計算時間,提高響應速度.但它也會占用更多的磁盤空間,包括materialized view 和它的index.
關于如何構建高性能的數據倉庫,ningoo 在 http://www.ningoo.net/2007/05/21/data_warehouse_guide_notes.htm 上也有一篇文章講解了在oracle上構建數據倉庫的性能優化技巧,包括
1 . RELY constraint
2 . bitmap index 和 Bitmap join index
3 . Unique constraint & unique index 的 disable validate
4 . Partition table
大家可以到ningoo 的網站上去看看.另外還有三篇關于oracle datawarehouse 的文章,關于materialized view 和 dimension的例子,大家可以到
http://www.akadia.com/services/ora_materialized_views.html 介紹materialized view
http://www.akadia.com/services/ora_dimensions.html 介紹一個dimension + materialized view
http://www.akadia.com/services/ora_olap_dimensions.html 介紹兩個跨表的dimension + materialized view
上面的三篇文章都寫的非常的通俗易懂,而且它提供的腳本可以很容易的運行例子,是很好的oracle warehouse 文章,推薦大家看看.
還有些procedure 用來驗證dimension的數據是否有效的在
http://www.stanford.edu/dept/itss/docs/oracle/10g/appdev.101/b10802/d_dimens.htm
EXEC dbms_utility.analyze_schema(' your db name ','COMPUTE');
EXEC dbms_olap.validate_dimension(' dimension name ',' db name ',FALSE,TRUE);
SELECT * FROM mview$_exceptions;
下篇介紹在oracle上部署mondrian 的 foodmart demo .
如果有哪位朋友可以推薦一下武漢的公司,最好是小一點的公司(大公司估計自己水品有限),如果有需要J2EE開發方向的工作職位的話,推薦一下,
jj12tt@yahoo.com.cn ,先謝謝了.