ETL學習心得:探求資料倉儲關鍵環節ETL的本質

fengzj發表於2008-12-23

ETL學習心得:探求資料倉儲關鍵環節ETL的本質

做資料倉儲系統,ETL是關鍵的一環。說大了,ETL是資料整合解決方案,說小了,就是倒資料的工具。回憶一下工作這麼些年來,處理資料遷移、轉換的工作倒還真的不少。但是那些工作基本上是一次性工作或者很小資料量,使用access、DTS或是自己編個小程式搞定。可是在資料倉儲系統中,ETL上升到了一定的理論高度,和原來小打小鬧的工具使用不同了。究竟什麼不同,從名字上就可以看到,人家已經將倒資料的過程分成3個步驟,E、T、L分別代表抽取、轉換和裝載。


其實ETL過程就是資料流動的過程,從不同的資料來源流向不同的目標資料。但在資料倉儲中,ETL有幾個特點,一是資料同步,它不是一次性倒完資料就拉到,它是經常性的活動,按照固定週期執行的,甚至現在還有人提出了實時ETL的概念。二是資料量,一般都是巨大的,值得你將資料流動的過程拆分成E、T和L。
現在有很多成熟的工具提供ETL功能,例如datastage、powermart等,且不說他們的好壞。從應用角度來說,ETL的過程其實不是非常複雜,這些工具給資料倉儲工程帶來和很大的便利性,特別是
開發的便利和維護的便利。但另一方面,開發人員容易迷失在這些工具中。舉個例子,VB是一種非常簡單的語言並且也是非常易用的程式設計工具,上手特別快,但是真正VB的高手有多少?微軟設計的產品通常有個原則是“將使用者當作傻瓜”,在這個原則下,微軟的東西確實非常好用,但是對於開發者,如果你自己也將自己當作傻瓜,那就真的傻了。ETL工具也是一樣,這些工具為我們提供圖形化介面,讓我們將主要的精力放在規則上,以期提高開發效率。從使用效果來說,確實使用這些工具能夠非常快速地構建一個job來處理某個資料,不過從整體來看,並不見得他的整體效率會高多少。問題主要不是出在工具上,而是在設計、開發人員上。他們迷失在工具中,沒有去探求ETL的本質。


可以說這些工具應用了這麼長時間,在這麼多專案、環境中應用,它必然有它成功之處,它必定體現了ETL的本質。如果我們不透過表面這些工具的簡單使用去看它背後蘊涵的思想,最終我們作出來的東西也就是一個個獨立的job,將他們整合起來仍然有巨大的工作量。大家都知道“理論與實踐相結合”,如果在一個領域有所超越,必須要在理論水平上達到一定的高度


探求ETL本質之一
ETL的過程就是資料流動的過程,從不同異構資料來源流向統一的目標資料。其間,資料的抽取、清洗、轉換和裝載形成序列或並行的過程。ETL的核心還是在於T這個過程,也就是轉換,而抽取和裝載一般可以作為轉換的輸入和輸出,或者,它們作為一個單獨的部件,其複雜度沒有轉換部件高。和OLTP系統中不同,那裡充滿這單條記錄的insert、update和select等操作,ETL過程一般都是批量操作,例如它的裝載多采用批量裝載工具,一般都是DBMS系統自身附帶的工具,例如Oracle SQLLoader和DB2的autoloader等。
 
ETL本身有一些特點,在一些工具中都有體現,下面以datastage和powermart舉例來說。
 
1、靜態的ETL單元和動態的ETL單元例項;一次轉換指明瞭某種格式的資料如何格式化成另一種格式的資料,對於資料來源的物理形式在設計時可以不用指定,它可以在執行時,當這個ETL單元建立一個例項時才指定。對於靜態和動態的ETL單元,Datastage沒有嚴格區分,它的一個Job就是實現這個功能,在早期版本,一個Job同時不能執行兩次,所以一個Job相當於一個例項,在後期版本,它支援multiple instances,而且還不是預設選項。Powermart中將這兩個概念加以區分,靜態的叫做Mapping,動態執行時叫做Session。
 
2、ETL後設資料;後設資料是描述資料的資料,他的含義非常廣泛,這裡僅指ETL的後設資料。主要包括每次轉換前後的資料結構和轉換的規則。ETL後設資料還包括形式引數的管理,形式引數的ETL單元
定義的引數,相對還有實參,它是執行時指定的引數,實參不在後設資料管理範圍之內。

3、資料流程的控制;要有視覺化的流程編輯工具,提供流程定義和流程監控功能。流程排程的最小單位是ETL單元例項,ETL單元是不能在細分的ETL過程,當然這由開發者來控制,例如可以將抽取、轉換放在一個ETL單元中,那樣這個抽取和轉換隻能同時執行,而如果將他們分作兩個單元,可以分別執行,這有利於錯誤恢復操作。當然,ETL單元究竟應該細分到什麼程度應該依據具體應用來看,目前還沒有找到很好的細分策略。比如,我們可以規定將裝載一個表的功能作為一個ETL單元,但是不可否認,這樣的ETL單元之間會有很多共同的操作,例如兩個單元共用一個Hash表,要將這個Hash表裝入記憶體兩次。

4、轉換規則的定義方法;提供函式集提供常用規則方法,提供規則定義語言描述規則。
 
5、對資料的快速索引;一般都是利用Hash技術,將參照關係表提前裝入記憶體,在轉換時查詢這個hash表。Datastage中有Hash檔案技術,Powermart也有類似的Lookup功能。

 探求ETL本質之二(分類)
昨在IT-Director上閱讀一篇報告,關於ETL產品分類的。一般來說,我們眼中的ETL工具都是價格昂貴,能夠處理海量資料的傢伙,但是這是其中的一種。它可以分成4種,針對不同的需求,主要是從轉換規則的複雜度和資料量大小來看。它們包括
1、互動式執行環境,你可以指定資料來源、目標資料,指定規則,立馬ETL。這種互動式的操作無疑非常方便,但是隻能適合小資料量和複雜度不高的ETL過程,因為一旦規則複雜了,可能需要語言級的描述,不能簡簡單單拖拖拽拽就可以的。還有資料量的問題,這種互動式必然建立在解釋型語言基礎上,另外他的靈活性必然要犧牲一定的效能為代價。所以如果要處理海量資料的話,每次讀取一條記錄,每次對規則進行解釋執行,每次在寫入一條記錄,這對效能影響是非常大的。
2、專門編碼型的,它提供了一個基於某種語言的程式框架,你可以不必將程式設計精力放在一些周邊的功能上,例如讀檔案功能、寫資料庫的功能,而將精力主要放在規則的實現上面。這種近似手工程式碼的效能肯定是沒話說,除非你的程式設計技巧不過關(這也是不可忽視的因素之一)。對於處理大資料量,處理複雜轉換邏輯,這種方式的ETL實現是非常直觀的。
3、程式碼生成器型的,它就像是一個ETL程式碼生成器,提供簡單的圖形化介面操作,讓你拖拖拽拽將轉換規則都設定好,其實他的後臺都是生成基於某種語言的程式,要執行這個ETL過程,必須要編譯才行。Datastage就是類似這樣的產品,設計好的job必須要編譯,這避免了每次轉換的解釋執行,但是不知道它生成的中間語言是什麼。以前我設計的ETL工具大挪移其實也是歸屬於這一類,它提供了介面讓使用者編寫規則,最後生成C++語言,編譯後即可執行。這類工具的特點就是要在介面上下狠功夫,必須讓使用者輕鬆定義一個ETL過程,提供豐富的外掛來完成讀、寫和轉換函式。大挪移在這方面就太弱了,規則必須手寫,而且要寫成標準c++語法,這未免還是有點難為終端使用者了,還不如做成一個專業編碼型的產品呢。另外一點,這類工具必須提供面向專家應用的功能,因為它不可能考慮到所有的轉換規則和所有的讀寫,一方面提供外掛介面來讓第三方編寫特定的外掛,另一方面還有提供特定語言來實現高階功能。例如Datastage提供一種類Basic的語言,不過他的Job的指令碼化實現好像就做的不太好,只能手工繪製job,而不能程式設計實現Job。
4、最後還有一種型別叫做資料集線器,顧名思義,他就是像Hub一樣地工作。將這種型別分出來和上面幾種分類在標準上有所差異,上面三種更多指ETL實現的方法,此類主要從資料處理角度。目前有一些產品屬於EAI(Enterprise Application Integration),它的資料整合主要是一種準實時性。所以這類產品就像Hub一樣,不斷接收各種異構資料來源來的資料,經過處理,在實施傳送到不同的目標資料中去。
雖然,這些類看似各又千秋,特別在BI專案中,面對海量資料的ETL時,中間兩種的選擇就開始了,在選擇過程中,必須要考慮到開發效率、維護方面、效能、學習曲線、人員技能等各方面因素,當然還有最重要也是最現實的因素就是客戶的意象。

探求ETL本質之三(轉換)
ETL探求之一中提到,ETL過程最複雜的部分就是T,這個轉換過程,T過程究竟有哪些型別呢?
一、巨集觀輸入輸出
從對資料來源的整個巨集觀處理分,看看一個ETL過程的輸入輸出,可以分成下面幾類:
1、大小交,這種處理在資料清洗過程是常見了,例如從資料來源到ODS階段,如果資料倉儲採用維度建模,而且維度基本採用代理鍵的話,必然存在程式碼到此鍵值的轉換。如果用SQL實現,必然需要將一個大表和一堆小表都Join起來,當然如果使用ETL工具的話,一般都是先將小表讀入記憶體中再處理。這種情況,輸出資料的粒度和大表一樣。
2、大大交,大表和大表之間關聯也是一個重要的課題,當然其中要有一個主表,在邏輯上,應當是主表Left Join輔表。大表之間的關聯存在最大的問題就是效能和穩定性,對於海量資料來說,必須有優化的方法來處理他們的關聯,另外,對於大資料的處理無疑會佔用太多的系統資源,出錯的機率非常大,如何做到有效錯誤恢復也是個問題。對於這種情況,我們建議還是儘量將大表拆分成適度的稍小一點的表,形成大小交的型別。這類情況的輸出資料粒度和主表一樣。
3、站著進來,躺著出去。事務系統中為了提高系統靈活性和擴充套件性,很多資訊放在程式碼表中維護,所以它的“事實表”就是一種窄表,而在資料倉儲中,通常要進行寬化,從行變成列,所以稱這種處理情況叫做“站著進來,躺著出去”。大家對Decode肯定不陌生,這是進行寬表化常見的手段之一。窄表變寬表的過程主要體現在對窄表中那個程式碼欄位的操作。這種情況,窄表是輸入,寬表是輸出,寬表的粒度必定要比窄表粗一些,就粗在那個程式碼欄位上。
4、聚集。資料倉儲中重要的任務就是沉澱資料,聚集是必不可少的操作,它是粗化資料粒度的過程。聚集本身其實很簡單,就是類似SQL中Group by的操作,選取特定欄位(維度),對度量欄位再使用某種聚集函式。但是對於大資料量情況下,聚集演算法的優化仍是探究的一個課題。例如是直接使用SQL的Group by,還是先排序,在處理。
二、微觀規則
從資料的轉換的微觀細節分,可以分成下面的幾個基本型別,當然還有一些複雜的組合情況,例如先運算,在參照轉換的規則,這種基於基本型別組合的情況就不在此列了。ETL的規則是依賴目標資料的,目標資料有多少欄位,就有多少條規則。
1、直接對映,原來是什麼就是什麼,原封不動照搬過來,對這樣的規則,如果資料來源欄位和目標欄位長度或精度不符,需要特別注意看是否真的可以直接對映還是需要做一些簡單運算。
2、欄位運算,資料來源的一個或多個欄位進行數學運算得到的目標欄位,這種規則一般對數值型欄位而言。
3、參照轉換,在轉換中通常要用資料來源的一個或多個欄位作為Key,去一個關聯陣列中去搜尋特定值,而且應該只能得到唯一值。這個關聯陣列使用Hash演算法實現是比較合適也是最常見的,在整個ETL開始之前,它就裝入記憶體,對效能提高的幫助非常大。
4、字串處理,從資料來源某個字串欄位中經常可以獲取特定資訊,例如身份證號。而且,經常會有數值型值以字串形式體現。對字串的操作通常有型別轉換、字串擷取等。但是由於字元型別欄位的隨意性也造成了髒資料的隱患,所以在處理這種規則的時候,一定要加上異常處理。
5、空值判斷,對於空值的處理是資料倉儲中一個常見問題,是將它作為髒資料還是作為特定一種維成員?這恐怕還要看應用的情況,也是需要進一步探求的。但是無論怎樣,對於可能有NULL值的欄位,不要採用“直接對映”的規則型別,必須對空值進行判斷,目前我們的建議是將它轉換成特定的值。
6、日期轉換,在資料倉儲中日期值一般都會有特定的,不同於日期型別值的表示方法,例如使用8位整型20040801表示日期。而在資料來源中,這種欄位基本都是日期型別的,所以對於這樣的規則,需要一些共通函式來處理將日期轉換為8位日期值、6位月份值等。
7、日期運算,基於日期,我們通常會計算日差、月差、時長等。一般資料庫提供的日期運算函式都是基於日期型的,而在資料倉儲中採用特定型別來表示日期的話,必須有一套自己的日期運算函式集。
8、聚集運算,對於事實表中的度量欄位,他們通常是通過資料來源一個或多個欄位運用聚集函式得來的,這些聚集函式為SQL標準中,包括sum,count,avg,min,max。
9、既定取值,這種規則和以上各種型別規則的差別就在於它不依賴於資料來源欄位,對目標欄位取一個固定的或是依賴系統的值。

 探求ETL本質之四(資料質量)
“不要絕對的資料準確,但要知道為什麼不準確。”
這是我們在構建BI系統是對資料準確性的要求。確實,對絕對的資料準確誰也沒有把握,不僅是系統整合商,包括客戶也是無法確定。準確的東西需要一個標準,但首先要保證這個標準是準確的,至少現在還沒有這樣一個標準。客戶會提出一個相對標準,例如將你的OLAP資料結果和報表結果對比。雖然這是一種不太公平的比較,你也只好認了吧。
 
首先在資料來源那裡,已經很難保證資料質量了,這一點也是事實。在這一層有哪些可能原因導致資料質量問題?可以分為下面幾類:
1、資料格式錯誤,例如缺失資料、資料值超出範圍或是資料格式非法等。要知道對於同樣處理大資料量的資料來源系統,他們通常會捨棄一些資料庫自身的檢查機制,例如欄位約束等。他們儘可能將資料檢查在入庫前保證,但是這一點是很難確保的。這類情況諸如身份證號碼、手機號、非日期型別的日期欄位等。
2、資料一致性,同樣,資料來源系統為了效能的考慮,會在一定程度上舍棄外來鍵約束,這通常會導致資料不一致。例如在帳務表中會出現一個使用者表中沒有的使用者ID,在例如有些程式碼在程式碼表中找不到等。
3、業務邏輯的合理性,這一點很難說對與錯。通常,資料來源系統的設計並不是非常嚴謹,例如讓使用者開戶日期晚於使用者銷戶日期都是有可能發生的,一個使用者表中存在多個使用者ID也是有可能發生的。對這種情況,有什麼辦法嗎?
 
構建一個BI系統,要做到完全理解資料來源系統根本就是不可能的。特別是資料來源系統在交付後,有更多維護人員的即興發揮,那更是要花大量的時間去尋找原因。以前曾經爭辯過設計人員對規則描述的問題,有人提出要在ETL開始之前務必將所有的規則弄得一清二楚。我並不同意這樣的意見,倒是認為在ETL過程要有處理這些質量有問題資料的保證。一定要正面這些髒資料,是丟棄還是處理,無法逃避。如果沒有質量保證,那麼在這個過程中,錯誤會逐漸放大,拋開資料來源質量問題,我們再來看看ETL過程中哪些因素對資料準確性產生重大影響。
1、規則描述錯誤。上面提到對設計人員對資料來源系統理解的不充分,導致規則理解錯誤,這是一方面。另一方面,是規則的描述,如果無二義性地描述規則也是要探求的一個課題。規則是依附於目標欄位的,在探求之三中,提到規則的分類。但是規則總不能總是用文字描述,必須有嚴格的數學表達方式。我甚至想過,如果設計人員能夠使用某種規則語言來描述,那麼我們的ETL單元就可以自動生成、同步,省去很多手工操作了。
2、ETL開發錯誤。即時規則很明確,ETL開發的過程中也會發生一些錯誤,例如邏輯錯誤、書寫錯誤等。例如對於一個分段值,開區間閉區間是需要指定的,但是常常開發人員沒注意,一個大於等於號寫成大於號就導致資料錯誤。
3、人為處理錯誤。在整體ETL流程沒有完成之前,為了圖省事,通常會手工執行ETL過程,這其中一個重大的問題就是你不會按照正常流程去執行了,而是按照自己的理解去執行,發生的錯誤可能是誤刪了資料、重複裝載資料等。

 探求ETL本質之五(質量保證)
上回提到ETL資料質量問題,這是無法根治的,只能採取特定的手段去儘量避免,而且必須要定義出度量方法來衡量資料的質量是好還是壞。對於資料來源的質量,客戶對此應該更加關心,如果在這個源頭不能保證比較乾淨的資料,那麼後面的分析功能的可信度也都成問題。資料來源系統也在不斷進化過程中,客戶的操作也在逐漸規範中,BI系統也同樣如此。本文探討一下對資料來源質量和ETL處理質量的應對方法。
如何應對資料來源的質量問題?記得在onteldatastage列表中也討論過一個話題-"-1的處理",在資料倉儲模型維表中,通常有一條-1記錄,表示“未知”,這個未知含義可廣了,任何可能出錯的資料,NULL資料甚至是規則沒有涵蓋到的資料,都轉成-1。這是一種處理髒資料的方法,但這也是一種掩蓋事實的方法。就好像寫一個函式FileOpen(filename),返回一個錯誤碼,當然,你可以只返回一種錯誤碼,如-1,但這是一種不好的設計,對於呼叫者來說,他需要依據這個錯誤碼進行某些判斷,例如是檔案不存在,還是讀取許可權不夠,都有相應的處理邏輯。資料倉儲中也是一樣,所以,建議將不同的資料質量型別處理結果分別轉換成不同的值,譬如,在轉換後,-1表示參照不上,-2表示NULL資料等。不過這僅僅對付了上回提到的第一類錯誤,資料格式錯誤。對於資料一致性和業務邏輯合理性問題,這仍有待探求。但這裡有一個原則就是“必須在資料倉儲中反應資料來源的質量”。
對於ETL過程中產生的質量問題,必須有保障手段。從以往的經驗看,沒有保障手段給實施人員帶來麻煩重重。實施人員對於反覆裝載資料一定不會陌生,甚至是最後資料留到最後的Cube,才發現了第一步ETL其實已經錯了。這個保障手段就是資料驗證機制,當然,它的目的是能夠在ETL過程中監控資料質量,產生報警。這個模組要將實施人員當作是終端使用者,可以說他們是資料驗證機制的直接收益者。
首先,必須有一個對質量的度量方法,什麼是高質什麼是低質,不能靠感官感覺,但這卻是在沒有度量方法條件下通常的做法。那經營分析系統來說,聯通總部曾提出測試規範,這其實就是一種度量方法,例如指標的誤差範圍不能高於5%等,對系統本身來說其實必須要有這樣的度量方法,先不要說這個度量方法是否科學。對於ETL資料處理質量,他的度量方法應該比聯通總部測試規範定義的方法更要嚴格,因為他更多將BI系統看作一個黑盒子,從資料來源到展現的資料誤差允許一定的誤差。而ETL資料處理質量度量是一種白盒的度量,要注重每一步過程。因此理論上,要求輸入輸出的指標應該完全一致。但是我們必須正面完全一致只是理想,對於有誤差的資料,必須找到原因。
在質量度量方法的前提下,就可以建立一個資料驗證框架。此框架依據總量、分量資料稽核方法,該方法在高的《資料倉儲中的資料稽核技術》一文中已經指出。作為補充,下面提出幾點功能上的建議:
1、提供前端。將開發實施人員當作使用者,同樣也要為之提供友好的使用者介面。《稽核技術》一文中指出測試報告的形式,這種形式還是要依賴人為判斷,在一堆資料中去找規律。到不如用OLAP的方式提供介面,不光是加上測試統計出來的指標結果,並且配合度量方法的計算。例如誤差率,對於誤差率為大於0的指標,就要好好查一下原因了。
2、提供框架。資料驗證不是一次性工作,而是每次ETL過程中都必須做的。因此,必須有一個框架,自動化驗證過程,並提供擴充套件手段,讓實施人員能夠增加驗證範圍。有了這樣一個框架,其實它起到規範化操作的作用,開發實施人員可以將主要精力放在驗證指令碼的編寫上,而不必過多關注驗證如何融合到流程中,如何展現等工作。為此,要設計一套表,類似於DM表,每次驗證結果資料都記錄其中,並且自動觸發多維分析的資料裝載、釋出等。這樣,實施人員可以在每次裝載,甚至在流程過程中就可以觀察資料的誤差率。特別是,如果資料倉儲的模型能夠統一起來,甚至資料驗證指令碼都可以確定下來,剩下的就是規範流程了。
3、規範流程。上回提到有一種ETL資料質量問題是由於人工處理導致的,其中最主要原因還是流程不規範。開發實施人員執行單獨一個ETL單元是很方便的,雖然以前曾建議一個ETL單元必須是“可重入”的,這能夠解決誤刪資料,重複裝載資料問題。但要記住資料驗證也是在流程當中,要讓資料驗證能夠日常運作,就不要讓實施者感覺到他的存在。總的來說,規範流程是提高實施效率的關鍵工作,這也是以後要繼續探求的。

 探求ETL本質之六(後設資料漫談)
對於後設資料(Metadata)的定義到目前為止沒有什麼特別精彩的,這個概念非常廣,一般都是這樣定義,“後設資料是描述資料的資料(Data about Data)”,這造成一種遞迴定義,就像問小強住在哪裡,答,在旺財隔壁。按照這樣的定義,後設資料所描述的資料是什麼呢?還是後設資料。這樣就可能有元元元...後設資料。我還聽說過一種對後設資料,如果說資料是一抽屜檔案,那麼後設資料就是分類標籤。那它和索引有什麼區別?
後設資料體現是一種抽象,哲學家從古至今都在抽象這個世界,力圖找到世界的本質。抽象不是一層關係,它是一種逐步由具體到一般的過程。例如我->男人->人->哺乳動物->生物這就是一個抽象過程,你要是在軟體業混會發現這個例子很常見,物件導向方法就是這樣一種抽象過程。它對世界中的事物、過程進行抽象,使用物件導向方法,構建一套物件模型。同樣在物件導向方法中,類是物件的抽象,介面又是對類的抽象。因此,我認為可以將“元”和“抽象”換一下,叫抽象資料是不是好理解一些。
常聽到這樣的話,“xx領導的講話高屋建瓴,給我們後面的工作指引的清晰的方向”,這個成語“高屋建瓴”,站在10樓往下到水,居高臨下,能砸死人,這是指站在一定的高度看待事物,這個一定的高度就是指他有夠“元”。在設計模式中,強調要對介面程式設計,就是說你不要處理這類物件和那類物件的互動,而要處理這個介面和那個介面的互動,先別管他們內部是怎麼幹的。
後設資料存在的意義也在於此,雖然上面說了一通都撤到哲學上去,但這個詞必須還是要結合軟體設計中看,我不知道在別的領域是不是存在Metadata這樣的叫法,雖然我相信別的領域必然有類似的東東。後設資料的存在就是要做到在更高抽象一層設計軟體。這肯定有好處,什麼靈活性啊,擴充套件性啊,可維護性啊,都能得到提高,而且架構清晰,只是彎彎太多,要是從下往上看,太複雜了。很早以前,我曾看過backorifice的程式碼,我靠,一個簡單的功能,從這個類轉到父類,又轉到父類,很不理解,為什麼一個簡單的功能不在一個類的方法中實現就拉到了呢?現在想想,還真不能這樣,這雖然使程式碼容易看懂了,但是結構確實混亂的,那他只能幹現在的事,如果有什麼功能擴充套件,這些程式碼就廢了。

我從98年剛工作時就開始接觸後設資料的概念,當時叫做後設資料驅動的系統架構,後來在QiDSS中也用到這個概念構建QiNavigator,但是現在覺得後設資料也沒啥,不就是建一堆表描述介面的元素,再利用這些資料自動生成介面嗎。到了資料倉儲系統中,這個概念更強了,是資料倉儲中一個重要的部分。但是至今,我還是認為這個概念過於玄乎,看不到實際的東西,市面上有一些後設資料管理的東西,但是從應用情況就得知,用的不多。之所以玄乎,就是因為抽象層次沒有分清楚,關鍵就是對於後設資料的分類(這種分類就是一種抽象過程)和後設資料的使用。你可以將後設資料抽象成0和1,但是那樣對你的業務有用嗎?必須還得抽象到適合的程度,最後問題還是“度”。
資料倉儲系統的後設資料作用如何?還不就是使系統自動運轉,易於管理嗎?要做到這一步,可沒必要將系統抽象到太極、兩儀、八卦之類的,業界也曾定義過一些後設資料規範,向CWM、XMI等等,可以借鑑,不過俺對此也是不精通的說,以後再說

原文連結:http://hi.baidu.com/horsewhite/blog/item/b167f81f6924ef0a304e15a0.html 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/219982/viewspace-520959/,如需轉載,請註明出處,否則將追究法律責任。

相關文章