999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Oracle物化視圖在數據倉庫中的應用

2008-12-31 00:00:00謝任東
電腦知識與技術 2008年12期

摘要:在數據倉庫的開發中,隨著業務數據量的劇增以及其數據量增加的不穩定性,如何使用一種合適的方式來實現ETL(數據的抽取,轉換,裝載)成為在數據倉庫開發中最需要考慮的熱點。本文介紹一種可以實現數據倉庫ETL的技術——Oracle物化試圖,并以作者在數據倉庫開發實踐作為例子,具體說明Oracle物化試圖的實現方法。

關鍵詞:數據倉庫;ETL;物化試圖;物化試圖日志;增量抽取

中圖分類號:TP311文獻標識碼:A 文章編號:1009-3044(2008)12-20000-00

Application of Oracle Materialized View in Data Warehouse

XIE Ren-dong1, YANG Jun2

(1.Beijing Global InfoTech Group,Beijing 100013,China;2.Department of Information Management Engineering ,Jiangxi Toursm Commerce College,Nanchang 330039,China)

Abstract: In the data warehouse development, along with the service data quantity sharp increase the instabilitywhich increases by and its the data quantity, how uses one appropriate way to realize ETL (data extracting, transformation, loading) becomes the hot spot which most needs to consider in the data warehouse development. This article introduced one kind may realize the data warehouseETL technical - Oracle Materialized View, and takes the example by the author in the data warehouse development practice, specifically explained the Oracle Materialized View realization method.

Key words: data warehouse; Materialized View; data extracting; transformation; loading

1 引言

隨著信息技術的不斷推廣和應用,許多企業都已經在使用管理信息系統處理管理事務和日常業務。這些管理信息系統為企業積累了大量的信息。企業管理者已經不滿足于僅僅用計算機去處理每天所發生的事務數據,而開始考慮如何利用這些信息海洋對企業的管理決策提供支持。因此,產生了與傳統數據庫有很大差異的數據環境要求和從這些海洋數據中獲取特殊知識的工具需要。這就需要一種能夠將日常業務處理中所收集到的各種數據轉變為具有商業價值信息的技術——數據倉庫。

數據倉庫是指一個面向主題的、集成的、隨時間變化的、非易失性數據的集合,用于支持管理層的決策過程的系統。在數據倉庫的開發中,技術上主要體現在ETL以及前端展現上,下面即將介紹一種ETL的實現方式——Oracle物化試圖。

2 ETL的實現方式

ETL是指數據抽取,轉換,裝載。數據抽取是指從源系統中抽取數據倉庫所需要的數據;數據轉換是指在源系統中抽取的數據不能直接應用在數據倉庫中查詢,需要將這部分數據轉換成滿足數據倉庫條件的數據;數據裝載是指將抽取出來以及轉換好的數據裝載到數據倉庫的數據庫中。

ETL實現方式主要有以下幾種(以下方式均以OLTP系統作為源系統,并進行ETL數據加載到OLAP系統):

1)時戳方式:需要在OLTP系統中業務表中統一添加時間字段作為時戳(如表中已有相應的時間字段,可以不必添加),每當OLTP系統中更新修改業務數據時,同時修改時戳字段值。當作ETL加載時,通過系統時間與時戳字段的比較來決定進行何種數據抽取。

2)日志表方式:在OLTP系統中添加系統日志表,當業務數據發生變化時,更新維護日志表內容,當作ETL加載時,通過讀日志表數據決定加載那些數據及如何加載。該方式即可用ORACLE物化視圖實現。

3)全表比對方式:在ETL過程中,抽取所有源數據,并進行相應規則轉換,完成后先不插入目標,而對每條數據進行目標表比對。根據主鍵值進行插入與更新的判定,目標表已存在該主鍵值的,表示該記錄已有,并進行其余字段比對,如有不同,進行Update操作,如目標表沒有存在該主鍵值,表示該記錄還沒有,即進行Insert操作。

4)全表刪除插入方式:每次ETL操作均刪除目標表數據,由ETL全新加載數據。

3 ORACLE物化視圖簡介

物化視圖是包括一個查詢結果的數據庫對像,它是遠程數據的的本地副本,或者用來生

成基于數據表求和的匯總表。物化視圖存儲基于遠程表的數據,也可以稱為快照。通常情況下,物化視圖被稱為主表(在復制期間)或明細表(在數據倉庫中)。對于復制,物化視圖允許你在本地維護遠程數據的副本,這些副本是只讀的。如果你想修改本地副本,必須用高級復制的功能。物化視圖可以查詢表,視圖和其它的物化視圖。 當你想從一個表或視圖中抽取數據時,你可以用從物化視圖中抽取。

創建物化視圖的時候可以指定多個選項,下面主要對創建方式(Build Methods), 查詢重寫(Query Rewrite),刷新(Refresh)三個選項進行說明:

創建方式:包括Build Immediate和Build Deferred兩種。Build Immediate是在創建物化視圖的時候就生成數據,而Build Deferred則在創建時不生成數據,以后根據需要在生成數據。默認為Build Immediate。

查詢重寫(Query Rewrite):包括Enable Query Rewrite和Disable Query Rewrite兩種。分別指出創建的物化視圖是否支持查詢重寫。查詢重寫是指當對物化視圖的基表進行查詢時,Oracle會自動判斷能否通過查詢物化視圖來得到結果,如果可以,則避免了聚集或連接操作,而直接從已經計算好的物化視圖中讀取數據。默認為Disable Query Rewrite。

刷新(Refresh):指當基表發生了DML操作后,物化視圖何時采用哪種方式和基表進行同步。刷新的模式有兩種:On Demand和On Commit。On Demand指物化視圖在用戶需要的時候進行刷新,可以手工通過DBMS_MVIEW。REFRESH等方法來進行刷新,也可以通過JOB定時進行刷新。On Commit指出物化視圖在對基表的DML操作提交的同時進行刷新。刷新的方法有四種:Fast、Complete、Force和Never。FAST刷新采用增量刷新,只刷新自上次刷新以后進行的修改。Complete刷新對整個物化視圖進行完全的刷新。如果選擇Force方式,則Oracle在刷新時會去判斷是否可以進行快速刷新,如果可以則采用Fast方式,否則采用Complete的方式。Never指物化視圖不進行任何刷新。默認值是Force On Demand。

如果需要進行快速刷新,需要建立物化視圖日志。 物化視圖日志根據不同物化視圖的快速刷新的需要,可以建立為ROWID或PRIMARY KEY類型的。還可以選擇是否包括SEQUENCE、INCLUDING NEW VALUES以及指定列的列表。上面這些情況產生的物化視圖日志的結構都不相同。物化視圖日志的名稱為MLOG$_后面跟基表的名稱,如果表名的長度超過20位,則只取前20位,當截短后出現名稱重復時,Oracle會自動在物化視圖日志名稱后面加上數字作為序號。

任何物化視圖都會包括的列:

SNAPTIME$$:用于表示刷新時間

DMLTYPE$$:用于表示DML操作類型,I表示INSERT,D表示DELETE,U表示UPDATE。

OLD_NEW$$:用于表示這個值是新值還是舊值。N(EW)表示新值,O(LD)表示舊值,U表示UPDATE操作。

CHANGE_VECTOR$$表示修改矢量,用來表示被修改的是哪個或哪幾個字段。

4 ORACLE物化視圖在數據倉庫中的應用

在數據倉庫的實現過程中,我們在進行ETL開發的時候,一般都是采用時間戳的方式來實現增量抽取。但是對于在業務系統中沒有時間戳的表,我們必須要修改業務系統,對沒有時間戳的表加上時間字段,以記錄業務發生的時間。這樣就增加了修改業務系統的工作,改動面也很大,也違背了在開發數據倉庫時候不應該修改業務系統的原則。所以對于在業務系統中,存在沒有保存時間字段的表,采用時間戳的方式實現是不合適的。還可以采用全表比對方式或全表刪除插入方式。對于采用全表比對方式,ETL設計非常復雜,而且如果數據量很大的話,實現增量抽取的時候需要很長的時間,速度很慢;對于全表刪除插入方式,如果OLTP系統中有刪除記錄的操作,那么在OLAP系統中將不會記錄到刪除的歷史數據,這樣就沒有實現保存歷史數據的功能,不能實現數據的遞增加載。

根據以上幾種實現方式的討論得出的結果,我們可以考慮采取Oracle物化視圖方式來實現ETL。 數據倉庫中的物化視圖主要用于預先計算并保存表連接或聚集等耗時較多的操作的結果,這樣,在執行查詢時,就可以避免進行這些耗時的操作,而從快速的得到結果。在數據倉庫中,還經常使用查詢重寫(Query Rewrite)機制,這樣不需要修改原有的查詢語句,Oracle會自動選擇合適的物化視圖進行查詢,完全對應用透明。物化視圖在一個段中存儲查詢結果,并且能夠在提交查詢時將結果返回給用戶,從而不再需要重新執行查詢 — 在查詢要執行幾次時(這在數據倉庫環境中非常常見),這是一個很大的好處。物化視圖可以利用一個快速刷新機制從基礎表中全部或增量刷新。下面用一個有時間字段但是用時間戳實現不了的例子來介紹Oracle物化視圖方式來實現ETL:在納稅管理系統中,納稅人來申報征收崗申報稅款開票,系統將在數據庫中保存了開票信息記錄在Lvy_征收數據(Lvy_levydata,圖1)表中,此時系統記錄當時的開票時間;但是當會統崗需要把稅款入庫的時候,需要把入庫信息即入庫時間更新到表Lvy_征收數據中對應的記錄上,但此時,系統并不會記錄更新的系統時間。因此,使用時間戳方式是無法實現的,我使用物化視圖日志來保存此時更新的信息,然后通過讀取日志表里的信息來跟數據倉庫中事實表(F_LevyInputData,圖1)的記錄比對實現增量抽取。整個ETL的架構圖如圖2。

以下是具體的實現步驟:

1)在中轉區創建表Lvy_levydata的物化試圖,使用快速刷新方式:

create Materialized view Lvy_levydata tablespace staging refresh fast start with sysdate next trunc(sysdate)+1+3/24 as select * from Lvy_levydata;

2)在中轉區物化試圖Lvy_levydata上創建物化試圖日志,該日志保存增量的數據:

create Materialized view log on Lvy_levydata with primary key (LevydataId)including new values;

3)在中轉區創建臨時表,該臨時表用于保存捕獲的變化數據信息:

create table temp_Lvy_levydata as select * from Lvy_levydata where 1=2;

4)從物化試圖日志里面讀取數據,并且于物化試圖關聯,這樣就得到了增量部分的數據,然后保存到臨時表中:

insert into temp_Lvy_levydata

select b.*

from staging.mlog$_Lvy_levydata a,Lvy_levydata b

where a.Levydataid=b.Levydataid;

5)現在已經得到了所有的變化數據,需要把這些數據插入到事實表F_LevyInputData中,可以采用先刪除再插入的方式,即從事實表中刪除在臨時表已經捕獲的變化數據,然后插入臨時表中的全部數據到事實表中的方式來實現;或者直接采用更新的方式,即比對事實表與臨時表,如果兩個表存在相同的主鍵,那么更新事實表的數據,如果在事實表中不存在,那么插入那條記錄。這里采用先刪除再插入方式:

刪除:delete from F_LevyInputData d

where exists (select 1 from temp_Lvy_levydata c

where d.LevyDetailDataId=c。Levydataid);

插入: insert into F_LevyInputData select * from temp_Lvy_levydata;

6)到這里基本上已經完成了ETL工作,剩下的工作就是要清空臨時表和物化試圖日志,以便下次抽取的時候不會出現重復的記錄:

EXECUTE IMMEDIATE truncate tabletemp_Lvy_levydata

EXECUTE IMMEDIATE truncate table staging.mlog$_Lvy_levydata;

5 結束語

利用ORACLE物化試圖,開發人員很容易就可以實現ETL,不用考慮源系統中的表是否具有時間戳字段,也不需要考慮數據量問題,因為物化試圖日志只裝載變化的那部分數據。 不需要修改OLTP表結構,源數據抽取清楚,速度較快。可以實現數據的遞增加載。而且日志表的維護是在中轉區進行,這樣不會影響OLTP系統。當然數據倉庫的實現最大的挑戰不是技術,而是開發人員對所需實現系統的業務理解。

參考文獻:

[1] 騰永昌.Oracle9i數據庫管理員使用大全 .北京:清華大學出版社,2004.

[2] [美]Kevin Loney,George Koch 著,鐘鳴,石永平,郝玉潔,譯.Oracle 9i參考手冊 .北京: 機械工業出版社,2003.

[3] [美]Paulraj Ponniah著,段云峰,李劍威,韓潔,宋美娜,譯.數據倉庫基礎.北京:電子工業出版社,2004.

收稿日期:2008-02-27

作者簡介:謝任東(1983-),男,江西寧都人。

主站蜘蛛池模板: 亚洲精品第一在线观看视频| 国产在线欧美| av在线无码浏览| 超级碰免费视频91| 国产伦片中文免费观看| 网久久综合| 国产超碰在线观看| 黄色免费在线网址| 亚洲AV无码精品无码久久蜜桃| 青草视频在线观看国产| 欧美国产日韩在线观看| 亚洲男人在线天堂| 国产v欧美v日韩v综合精品| 亚洲va视频| 手机在线国产精品| 大学生久久香蕉国产线观看| 久久综合国产乱子免费| 国产高潮流白浆视频| 亚洲成a人片77777在线播放 | 99热这里只有免费国产精品 | 麻豆国产精品| 激情国产精品一区| 九色综合视频网| 91免费国产高清观看| 精品视频在线一区| 一区二区三区高清视频国产女人| 国产网友愉拍精品视频| 国产亚洲精品91| 青青草国产在线视频| 无码'专区第一页| 亚洲日韩精品无码专区97| 婷婷亚洲视频| 一本大道无码日韩精品影视| 欧美第二区| 在线va视频| 青草免费在线观看| 激情爆乳一区二区| 欧美日本激情| 2019国产在线| 国产欧美视频在线观看| 久久综合亚洲色一区二区三区| 国产呦视频免费视频在线观看| 国产在线视频欧美亚综合| 毛片免费高清免费| 国产成人高清精品免费5388| 国产精品视频系列专区| 国产精品手机视频| 欧美成人a∨视频免费观看| 久久久受www免费人成| 国产三级视频网站| 久久免费成人| 青青草原国产免费av观看| 亚洲一区二区三区香蕉| 欧美成人精品欧美一级乱黄| 久久人搡人人玩人妻精品一| 欧美a√在线| 亚洲精品福利视频| 久久性妇女精品免费| 国产性精品| 欧美激情视频二区三区| 在线免费看黄的网站| av天堂最新版在线| www.亚洲天堂| 日韩乱码免费一区二区三区| 亚洲欧美日韩成人高清在线一区| 强奷白丝美女在线观看| 国产区人妖精品人妖精品视频| 日韩精品毛片| 欧美日韩中文国产| 亚洲精品成人7777在线观看| 先锋资源久久| 欧美色伊人| 国产91透明丝袜美腿在线| 欧美不卡视频一区发布| 爱色欧美亚洲综合图区| 澳门av无码| 99热国产在线精品99| 爱色欧美亚洲综合图区| AV在线天堂进入| AV不卡在线永久免费观看 | 久久国产成人精品国产成人亚洲 | 国产色网站|