欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      ETL學(xué)習(xí)心得

      時間:2019-05-13 09:12:39下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《ETL學(xué)習(xí)心得》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《ETL學(xué)習(xí)心得》。

      第一篇:ETL學(xué)習(xí)心得

      ETL學(xué)習(xí)心得:探求數(shù)據(jù)倉庫關(guān)鍵環(huán)節(jié)ETL的本質(zhì)

      做數(shù)據(jù)倉庫系統(tǒng),ETL是關(guān)鍵的一環(huán)。說大了,ETL是數(shù)據(jù)整合解決方案,說小了,就是倒數(shù)據(jù)的工具。回憶一下工作這么些年來,處理數(shù)據(jù)遷移、轉(zhuǎn)換的工作倒還真的不少。但是那些工作基本上是一次性工作或者很小數(shù)據(jù)量,使用access、DTS或是自己編個小程序搞定??墒窃跀?shù)據(jù)倉庫系統(tǒng)中,ETL上升到了一定的理論高度,和原來小打小鬧的工具使用不同了。究竟什么不同,從名字上就可以看到,人家已經(jīng)將倒數(shù)據(jù)的過程分成3個步驟,E、T、L分別代表抽取、轉(zhuǎn)換和裝載。

      其實ETL過程就是數(shù)據(jù)流動的過程,從不同的數(shù)據(jù)源流向不同的目標(biāo)數(shù)據(jù)。但在數(shù)據(jù)倉庫中,ETL有幾個特點,一是數(shù)據(jù)同步,它不是一次性倒完數(shù)據(jù)就拉到,它是經(jīng)常性的活動,按照固定周期運行的,甚至現(xiàn)在還有人提出了實時ETL的概念。二是數(shù)據(jù)量,一般都是巨大的,值得你將數(shù)據(jù)流動的過程拆分成E、T和L。

      現(xiàn)在有很多成熟的工具提供ETL功能,例如datastage、powermart等,且不說他們的好壞。從應(yīng)用角度來說,ETL的過程其實不是非常復(fù)雜,這些工具給數(shù)據(jù)倉庫工程帶來和很大的便利性,特別是開發(fā)的便利和維護(hù)的便利。但另一方面,開發(fā)人員容易迷失在這些工具中。舉個例子,VB是一種非常簡單的語言并且也是非常易用的編程工具,上手特別快,但是真正VB的高手有多少?微軟設(shè)計的產(chǎn)品通常有個原則是“將使用者當(dāng)作傻瓜”,在這個原則下,微軟的東西確實非常好用,但是對于開發(fā)者,如果你自己也將自己當(dāng)作傻瓜,那就真的傻了。ETL工具也是一樣,這些工具為我們提供圖形化界面,讓我們將主要的精力放在規(guī)則上,以期提高開發(fā)效率。從使用效果來說,確實使用這些工具能夠非常快速地構(gòu)建一個job來處理某個數(shù)據(jù),不過從整體來看,并不見得他的整體效率會高多少。問題主要不是出在工具上,而是在設(shè)計、開發(fā)人員上。他們迷失在工具中,沒有去探求ETL的本質(zhì)。

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

      探求ETL本質(zhì)之一

      ETL的過程就是數(shù)據(jù)流動的過程,從不同異構(gòu)數(shù)據(jù)源流向統(tǒng)一的目標(biāo)數(shù)據(jù)。其間,數(shù)據(jù)的抽取、清洗、轉(zhuǎn)換和裝載形成串行或并行的過程。ETL的核心還是在于T這個過程,也就是轉(zhuǎn)換,而抽取和裝載一般可以作為轉(zhuǎn)換的輸入和輸出,或者,它們作為一個單獨的部件,其復(fù)雜度沒有轉(zhuǎn)換部件高。和OLTP系統(tǒng)中不同,那里充滿這單條記錄的insert、update和select等操作,ETL過程一般都是批量操作,例如它的裝載多采用批量裝載工具,一般都是DBMS系統(tǒng)自身附帶的工具,例如Oracle SQLLoader和DB2的autoloader等。

      ETL本身有一些特點,在一些工具中都有體現(xiàn),下面以datastage和powermart舉例來說。

      1、靜態(tài)的ETL單元和動態(tài)的ETL單元實例;一次轉(zhuǎn)換指明了某種格式的數(shù)據(jù)如何格式化成另一種格式的數(shù)據(jù),對于數(shù)據(jù)源的物理形式在設(shè)計時可以不用指定,它可以在運行時,當(dāng)這個ETL單元創(chuàng)建一個實例時才指定。對于靜態(tài)和動態(tài)的ETL單元,Datastage沒有嚴(yán)格區(qū)分,它的一個Job就是實現(xiàn)這個功能,在早期版本,一個Job同時不能運行兩次,所以一個Job相當(dāng)于一個實例,在后期版本,它支持multiple instances,而且還不是默認(rèn)選項。Powermart中將這兩個概念加以區(qū)分,靜態(tài)的叫做Mapping,動態(tài)運行時叫做Session。

      2、ETL元數(shù)據(jù);元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),他的含義非常廣泛,這里僅指ETL的元數(shù)據(jù)。主要包括每次轉(zhuǎn)換前后的數(shù)據(jù)結(jié)構(gòu)和轉(zhuǎn)換的規(guī)則。ETL元數(shù)據(jù)還包括形式參數(shù)的管理,形式參數(shù)的ETL單元定義的參數(shù),相對還有實參,它是運行時指定的參數(shù),實參不在元數(shù)據(jù)管理范圍之內(nèi)。

      3、數(shù)據(jù)流程的控制;要有可視化的流程編輯工具,提供流程定義和流程監(jiān)控功能。流程調(diào)度的最小單位是ETL單元實例,ETL單元是不能在細(xì)分的ETL過程,當(dāng)然這由開發(fā)者來控制,例如可以將抽取、轉(zhuǎn)換放在一個ETL單元中,那樣這個抽取和轉(zhuǎn)換只能同時運行,而如果將他們分作兩個單元,可

      以分別運行,這有利于錯誤恢復(fù)操作。當(dāng)然,ETL單元究竟應(yīng)該細(xì)分到什么程度應(yīng)該依據(jù)具體應(yīng)用來看,目前還沒有找到很好的細(xì)分策略。比如,我們可以規(guī)定將裝載一個表的功能作為一個ETL單元,但是不可否認(rèn),這樣的ETL單元之間會有很多共同的操作,例如兩個單元共用一個Hash表,要將這個Hash表裝入內(nèi)存兩次。

      4、轉(zhuǎn)換規(guī)則的定義方法;提供函數(shù)集提供常用規(guī)則方法,提供規(guī)則定義語言描述規(guī)則。

      5、對數(shù)據(jù)的快速索引;一般都是利用Hash技術(shù),將參照關(guān)系表提前裝入內(nèi)存,在轉(zhuǎn)換時查找這個hash表。Datastage中有Hash文件技術(shù),Powermart也有類似的Lookup功能。

      探求ETL本質(zhì)之二(分類)

      昨在IT-Director上閱讀一篇報告,關(guān)于ETL產(chǎn)品分類的。一般來說,我們眼中的ETL工具都是價格昂貴,能夠處理海量數(shù)據(jù)的家伙,但是這是其中的一種。它可以分成4種,針對不同的需求,主要是從轉(zhuǎn)換規(guī)則的復(fù)雜度和數(shù)據(jù)量大小來看。它們包括

      1、交互式運行環(huán)境,你可以指定數(shù)據(jù)源、目標(biāo)數(shù)據(jù),指定規(guī)則,立馬ETL。這種交互式的操作無疑非常方便,但是只能適合小數(shù)據(jù)量和復(fù)雜度不高的ETL過程,因為一旦規(guī)則復(fù)雜了,可能需要語言級的描述,不能簡簡單單拖拖拽拽就可以的。還有數(shù)據(jù)量的問題,這種交互式必然建立在解釋型語言基礎(chǔ)上,另外他的靈活性必然要犧牲一定的性能為代價。所以如果要處理海量數(shù)據(jù)的話,每次讀取一條記錄,每次對規(guī)則進(jìn)行解釋執(zhí)行,每次在寫入一條記錄,這對性能影響是非常大的。

      2、專門編碼型的,它提供了一個基于某種語言的程序框架,你可以不必將編程精力放在一些周邊的功能上,例如讀文件功能、寫數(shù)據(jù)庫的功能,而將精力主要放在規(guī)則的實現(xiàn)上面。這種近似手工代碼的性能肯定是沒話說,除非你的編程技巧不過關(guān)(這也是不可忽視的因素之一)。對于處理大數(shù)據(jù)量,處理復(fù)雜轉(zhuǎn)換邏輯,這種方式的ETL實現(xiàn)是非常直觀的。

      3、代碼生成器型的,它就像是一個ETL代碼生成器,提供簡單的圖形化界面操作,讓你拖拖拽拽將轉(zhuǎn)換規(guī)則都設(shè)定好,其實他的后臺都是生成基于某種語言的程序,要運行這個ETL過程,必須要編譯才行。Datastage就是類似這樣的產(chǎn)品,設(shè)計好的job必須要編譯,這避免了每次轉(zhuǎn)換的解釋執(zhí)行,但是不知道它生成的中間語言是什么。以前我設(shè)計的ETL工具大挪移其實也是歸屬于這一類,它提供了界面讓用戶編寫規(guī)則,最后生成C++語言,編譯后即可運行。這類工具的特點就是要在界面上下狠功夫,必須讓用戶輕松定義一個ETL過程,提供豐富的插件來完成讀、寫和轉(zhuǎn)換函數(shù)。大挪移在這方面就太弱了,規(guī)則必須手寫,而且要寫成標(biāo)準(zhǔn)c++語法,這未免還是有點難為最終用戶了,還不如做成一個專業(yè)編碼型的產(chǎn)品呢。另外一點,這類工具必須提供面向?qū)<覒?yīng)用的功能,因為它不可能考慮到所有的轉(zhuǎn)換規(guī)則和所有的讀寫,一方面提供插件接口來讓第三方編寫特定的插件,另一方面還有提供特定語言來實現(xiàn)高級功能。例如Datastage提供一種類Basic的語言,不過他的Job的腳本化實現(xiàn)好像就做的不太好,只能手工繪制job,而不能編程實現(xiàn)Job。

      4、最后還有一種類型叫做數(shù)據(jù)集線器,顧名思義,他就是像Hub一樣地工作。將這種類型分出來和上面幾種分類在標(biāo)準(zhǔn)上有所差異,上面三種更多指ETL實現(xiàn)的方法,此類主要從數(shù)據(jù)處理角度。目前有一些產(chǎn)品屬于EAI(Enterprise Application Integration),它的數(shù)據(jù)集成主要是一種準(zhǔn)實時性。所以這類產(chǎn)品就像Hub一樣,不斷接收各種異構(gòu)數(shù)據(jù)源來的數(shù)據(jù),經(jīng)過處理,在實施發(fā)送到不同的目標(biāo)數(shù)據(jù)中去。

      雖然,這些類看似各又千秋,特別在BI項目中,面對海量數(shù)據(jù)的ETL時,中間兩種的選擇就開始了,在選擇過程中,必須要考慮到開發(fā)效率、維護(hù)方面、性能、學(xué)習(xí)曲線、人員技能等各方面因素,當(dāng)然還有最重要也是最現(xiàn)實的因素就是客戶的意象。

      探求ETL本質(zhì)之三(轉(zhuǎn)換)

      ETL探求之一中提到,ETL過程最復(fù)雜的部分就是T,這個轉(zhuǎn)換過程,T過程究竟有哪些類型呢?

      一、宏觀輸入輸出

      從對數(shù)據(jù)源的整個宏觀處理分,看看一個ETL過程的輸入輸出,可以分成下面幾類:

      1、大小交,這種處理在數(shù)據(jù)清洗過程是常見了,例如從數(shù)據(jù)源到ODS階段,如果數(shù)據(jù)倉庫采用

      維度建模,而且維度基本采用代理鍵的話,必然存在代碼到此鍵值的轉(zhuǎn)換。如果用SQL實現(xiàn),必然需要將一個大表和一堆小表都Join起來,當(dāng)然如果使用ETL工具的話,一般都是先將小表讀入內(nèi)存中再處理。這種情況,輸出數(shù)據(jù)的粒度和大表一樣。

      2、大大交,大表和大表之間關(guān)聯(lián)也是一個重要的課題,當(dāng)然其中要有一個主表,在邏輯上,應(yīng)當(dāng)是主表Left Join輔表。大表之間的關(guān)聯(lián)存在最大的問題就是性能和穩(wěn)定性,對于海量數(shù)據(jù)來說,必須有優(yōu)化的方法來處理他們的關(guān)聯(lián),另外,對于大數(shù)據(jù)的處理無疑會占用太多的系統(tǒng)資源,出錯的幾率非常大,如何做到有效錯誤恢復(fù)也是個問題。對于這種情況,我們建議還是盡量將大表拆分成適度的稍小一點的表,形成大小交的類型。這類情況的輸出數(shù)據(jù)粒度和主表一樣。

      3、站著進(jìn)來,躺著出去。事務(wù)系統(tǒng)中為了提高系統(tǒng)靈活性和擴展性,很多信息放在代碼表中維護(hù),所以它的“事實表”就是一種窄表,而在數(shù)據(jù)倉庫中,通常要進(jìn)行寬化,從行變成列,所以稱這種處理情況叫做“站著進(jìn)來,躺著出去”。大家對Decode肯定不陌生,這是進(jìn)行寬表化常見的手段之一。窄表變寬表的過程主要體現(xiàn)在對窄表中那個代碼字段的操作。這種情況,窄表是輸入,寬表是輸出,寬表的粒度必定要比窄表粗一些,就粗在那個代碼字段上。

      4、聚集。數(shù)據(jù)倉庫中重要的任務(wù)就是沉淀數(shù)據(jù),聚集是必不可少的操作,它是粗化數(shù)據(jù)粒度的過程。聚集本身其實很簡單,就是類似SQL中Group by的操作,選取特定字段(維度),對度量字段再使用某種聚集函數(shù)。但是對于大數(shù)據(jù)量情況下,聚集算法的優(yōu)化仍是探究的一個課題。例如是直接使用SQL的Group by,還是先排序,在處理。

      二、微觀規(guī)則

      從數(shù)據(jù)的轉(zhuǎn)換的微觀細(xì)節(jié)分,可以分成下面的幾個基本類型,當(dāng)然還有一些復(fù)雜的組合情況,例如先運算,在參照轉(zhuǎn)換的規(guī)則,這種基于基本類型組合的情況就不在此列了。ETL的規(guī)則是依賴目標(biāo)數(shù)據(jù)的,目標(biāo)數(shù)據(jù)有多少字段,就有多少條規(guī)則。

      1、直接映射,原來是什么就是什么,原封不動照搬過來,對這樣的規(guī)則,如果數(shù)據(jù)源字段和目標(biāo)字段長度或精度不符,需要特別注意看是否真的可以直接映射還是需要做一些簡單運算。

      2、字段運算,數(shù)據(jù)源的一個或多個字段進(jìn)行數(shù)學(xué)運算得到的目標(biāo)字段,這種規(guī)則一般對數(shù)值型字段而言。

      3、參照轉(zhuǎn)換,在轉(zhuǎn)換中通常要用數(shù)據(jù)源的一個或多個字段作為Key,去一個關(guān)聯(lián)數(shù)組中去搜索特定值,而且應(yīng)該只能得到唯一值。這個關(guān)聯(lián)數(shù)組使用Hash算法實現(xiàn)是比較合適也是最常見的,在整個ETL開始之前,它就裝入內(nèi)存,對性能提高的幫助非常大。

      4、字符串處理,從數(shù)據(jù)源某個字符串字段中經(jīng)??梢垣@取特定信息,例如身份證號。而且,經(jīng)常會有數(shù)值型值以字符串形式體現(xiàn)。對字符串的操作通常有類型轉(zhuǎn)換、字符串截取等。但是由于字符類型字段的隨意性也造成了臟數(shù)據(jù)的隱患,所以在處理這種規(guī)則的時候,一定要加上異常處理。

      5、空值判斷,對于空值的處理是數(shù)據(jù)倉庫中一個常見問題,是將它作為臟數(shù)據(jù)還是作為特定一種維成員?這恐怕還要看應(yīng)用的情況,也是需要進(jìn)一步探求的。但是無論怎樣,對于可能有NULL值的字段,不要采用“直接映射”的規(guī)則類型,必須對空值進(jìn)行判斷,目前我們的建議是將它轉(zhuǎn)換成特定的值。

      6、日期轉(zhuǎn)換,在數(shù)據(jù)倉庫中日期值一般都會有特定的,不同于日期類型值的表示方法,例如使用8位整型20040801表示日期。而在數(shù)據(jù)源中,這種字段基本都是日期類型的,所以對于這樣的規(guī)則,需要一些共通函數(shù)來處理將日期轉(zhuǎn)換為8位日期值、6位月份值等。

      7、日期運算,基于日期,我們通常會計算日差、月差、時長等。一般數(shù)據(jù)庫提供的日期運算函數(shù)都是基于日期型的,而在數(shù)據(jù)倉庫中采用特定類型來表示日期的話,必須有一套自己的日期運算函數(shù)集。

      8、聚集運算,對于事實表中的度量字段,他們通常是通過數(shù)據(jù)源一個或多個字段運用聚集函數(shù)得來的,這些聚集函數(shù)為SQL標(biāo)準(zhǔn)中,包括sum,count,avg,min,max。

      9、既定取值,這種規(guī)則和以上各種類型規(guī)則的差別就在于它不依賴于數(shù)據(jù)源字段,對目標(biāo)字段取一個固定的或是依賴系統(tǒng)的值。

      探求ETL本質(zhì)之四(數(shù)據(jù)質(zhì)量)

      “不要絕對的數(shù)據(jù)準(zhǔn)確,但要知道為什么不準(zhǔn)確?!?/p>

      這是我們在構(gòu)建BI系統(tǒng)是對數(shù)據(jù)準(zhǔn)確性的要求。確實,對絕對的數(shù)據(jù)準(zhǔn)確誰也沒有把握,不僅是系統(tǒng)集成商,包括客戶也是無法確定。準(zhǔn)確的東西需要一個標(biāo)準(zhǔn),但首先要保證這個標(biāo)準(zhǔn)是準(zhǔn)確的,至少現(xiàn)在還沒有這樣一個標(biāo)準(zhǔn)??蛻魰岢鲆粋€相對標(biāo)準(zhǔn),例如將你的OLAP數(shù)據(jù)結(jié)果和報表結(jié)果對比。雖然這是一種不太公平的比較,你也只好認(rèn)了吧。

      首先在數(shù)據(jù)源那里,已經(jīng)很難保證數(shù)據(jù)質(zhì)量了,這一點也是事實。在這一層有哪些可能原因?qū)е聰?shù)據(jù)質(zhì)量問題?可以分為下面幾類:

      1、數(shù)據(jù)格式錯誤,例如缺失數(shù)據(jù)、數(shù)據(jù)值超出范圍或是數(shù)據(jù)格式非法等。要知道對于同樣處理大數(shù)據(jù)量的數(shù)據(jù)源系統(tǒng),他們通常會舍棄一些數(shù)據(jù)庫自身的檢查機制,例如字段約束等。他們盡可能將數(shù)據(jù)檢查在入庫前保證,但是這一點是很難確保的。這類情況諸如身份證號碼、手機號、非日期類型的日期字段等。

      2、數(shù)據(jù)一致性,同樣,數(shù)據(jù)源系統(tǒng)為了性能的考慮,會在一定程度上舍棄外鍵約束,這通常會導(dǎo)致數(shù)據(jù)不一致。例如在帳務(wù)表中會出現(xiàn)一個用戶表中沒有的用戶ID,在例如有些代碼在代碼表中找不到等。

      3、業(yè)務(wù)邏輯的合理性,這一點很難說對與錯。通常,數(shù)據(jù)源系統(tǒng)的設(shè)計并不是非常嚴(yán)謹(jǐn),例如讓用戶開戶日期晚于用戶銷戶日期都是有可能發(fā)生的,一個用戶表中存在多個用戶ID也是有可能發(fā)生的。對這種情況,有什么辦法嗎?

      構(gòu)建一個BI系統(tǒng),要做到完全理解數(shù)據(jù)源系統(tǒng)根本就是不可能的。特別是數(shù)據(jù)源系統(tǒng)在交付后,有更多維護(hù)人員的即興發(fā)揮,那更是要花大量的時間去尋找原因。以前曾經(jīng)爭辯過設(shè)計人員對規(guī)則描述的問題,有人提出要在ETL開始之前務(wù)必將所有的規(guī)則弄得一清二楚。我并不同意這樣的意見,倒是認(rèn)為在ETL過程要有處理這些質(zhì)量有問題數(shù)據(jù)的保證。一定要正面這些臟數(shù)據(jù),是丟棄還是處理,無法逃避。如果沒有質(zhì)量保證,那么在這個過程中,錯誤會逐漸放大,拋開數(shù)據(jù)源質(zhì)量問題,我們再來看看ETL過程中哪些因素對數(shù)據(jù)準(zhǔn)確性產(chǎn)生重大影響。

      1、規(guī)則描述錯誤。上面提到對設(shè)計人員對數(shù)據(jù)源系統(tǒng)理解的不充分,導(dǎo)致規(guī)則理解錯誤,這是一方面。另一方面,是規(guī)則的描述,如果無二義性地描述規(guī)則也是要探求的一個課題。規(guī)則是依附于目標(biāo)字段的,在探求之三中,提到規(guī)則的分類。但是規(guī)則總不能總是用文字描述,必須有嚴(yán)格的數(shù)學(xué)表達(dá)方式。我甚至想過,如果設(shè)計人員能夠使用某種規(guī)則語言來描述,那么我們的ETL單元就可以自動生成、同步,省去很多手工操作了。

      2、ETL開發(fā)錯誤。即時規(guī)則很明確,ETL開發(fā)的過程中也會發(fā)生一些錯誤,例如邏輯錯誤、書寫錯誤等。例如對于一個分段值,開區(qū)間閉區(qū)間是需要指定的,但是常常開發(fā)人員沒注意,一個大于等于號寫成大于號就導(dǎo)致數(shù)據(jù)錯誤。

      3、人為處理錯誤。在整體ETL流程沒有完成之前,為了圖省事,通常會手工運行ETL過程,這其中一個重大的問題就是你不會按照正常流程去運行了,而是按照自己的理解去運行,發(fā)生的錯誤可能是誤刪了數(shù)據(jù)、重復(fù)裝載數(shù)據(jù)等。

      探求ETL本質(zhì)之五(質(zhì)量保證)

      上回提到ETL數(shù)據(jù)質(zhì)量問題,這是無法根治的,只能采取特定的手段去盡量避免,而且必須要定義出度量方法來衡量數(shù)據(jù)的質(zhì)量是好還是壞。對于數(shù)據(jù)源的質(zhì)量,客戶對此應(yīng)該更加關(guān)心,如果在這個源頭不能保證比較干凈的數(shù)據(jù),那么后面的分析功能的可信度也都成問題。數(shù)據(jù)源系統(tǒng)也在不斷進(jìn)化過程中,客戶的操作也在逐漸規(guī)范中,BI系統(tǒng)也同樣如此。本文探討一下對數(shù)據(jù)源質(zhì)量和ETL處理質(zhì)量的應(yīng)對方法。

      如何應(yīng)對數(shù)據(jù)源的質(zhì)量問題?記得在onteldatastage列表中也討論過一個話題-“-1的處理”,在數(shù)據(jù)倉庫模型維表中,通常有一條-1記錄,表示“未知”,這個未知含義可廣了,任何可能出錯的數(shù)據(jù),NULL數(shù)據(jù)甚至是規(guī)則沒有涵蓋到的數(shù)據(jù),都轉(zhuǎn)成-1。這是一種處理臟數(shù)據(jù)的方法,但這也是一種掩蓋

      事實的方法。就好像寫一個函數(shù)FileOpen(filename),返回一個錯誤碼,當(dāng)然,你可以只返回一種錯誤碼,如-1,但這是一種不好的設(shè)計,對于調(diào)用者來說,他需要依據(jù)這個錯誤碼進(jìn)行某些判斷,例如是文件不存在,還是讀取權(quán)限不夠,都有相應(yīng)的處理邏輯。數(shù)據(jù)倉庫中也是一樣,所以,建議將不同的數(shù)據(jù)質(zhì)量類型處理結(jié)果分別轉(zhuǎn)換成不同的值,譬如,在轉(zhuǎn)換后,-1表示參照不上,-2表示NULL數(shù)據(jù)等。不過這僅僅對付了上回提到的第一類錯誤,數(shù)據(jù)格式錯誤。對于數(shù)據(jù)一致性和業(yè)務(wù)邏輯合理性問題,這仍有待探求。但這里有一個原則就是“必須在數(shù)據(jù)倉庫中反應(yīng)數(shù)據(jù)源的質(zhì)量”。

      對于ETL過程中產(chǎn)生的質(zhì)量問題,必須有保障手段。從以往的經(jīng)驗看,沒有保障手段給實施人員帶來麻煩重重。實施人員對于反復(fù)裝載數(shù)據(jù)一定不會陌生,甚至是最后數(shù)據(jù)留到最后的Cube,才發(fā)現(xiàn)了第一步ETL其實已經(jīng)錯了。這個保障手段就是數(shù)據(jù)驗證機制,當(dāng)然,它的目的是能夠在ETL過程中監(jiān)控數(shù)據(jù)質(zhì)量,產(chǎn)生報警。這個模塊要將實施人員當(dāng)作是最終用戶,可以說他們是數(shù)據(jù)驗證機制的直接收益者。

      首先,必須有一個對質(zhì)量的度量方法,什么是高質(zhì)什么是低質(zhì),不能靠感官感覺,但這卻是在沒有度量方法條件下通常的做法。那經(jīng)營分析系統(tǒng)來說,聯(lián)通總部曾提出測試規(guī)范,這其實就是一種度量方法,例如指標(biāo)的誤差范圍不能高于5%等,對系統(tǒng)本身來說其實必須要有這樣的度量方法,先不要說這個度量方法是否科學(xué)。對于ETL數(shù)據(jù)處理質(zhì)量,他的度量方法應(yīng)該比聯(lián)通總部測試規(guī)范定義的方法更要嚴(yán)格,因為他更多將BI系統(tǒng)看作一個黑盒子,從數(shù)據(jù)源到展現(xiàn)的數(shù)據(jù)誤差允許一定的誤差。而ETL數(shù)據(jù)處理質(zhì)量度量是一種白盒的度量,要注重每一步過程。因此理論上,要求輸入輸出的指標(biāo)應(yīng)該完全一致。但是我們必須正面完全一致只是理想,對于有誤差的數(shù)據(jù),必須找到原因。

      在質(zhì)量度量方法的前提下,就可以建立一個數(shù)據(jù)驗證框架。此框架依據(jù)總量、分量數(shù)據(jù)稽核方法,該方法在高的《數(shù)據(jù)倉庫中的數(shù)據(jù)稽核技術(shù)》一文中已經(jīng)指出。作為補充,下面提出幾點功能上的建議:

      1、提供前端。將開發(fā)實施人員當(dāng)作用戶,同樣也要為之提供友好的用戶界面?!痘思夹g(shù)》一文中指出測試報告的形式,這種形式還是要依賴人為判斷,在一堆數(shù)據(jù)中去找規(guī)律。到不如用OLAP的方式提供界面,不光是加上測試統(tǒng)計出來的指標(biāo)結(jié)果,并且配合度量方法的計算。例如誤差率,對于誤差率為大于0的指標(biāo),就要好好查一下原因了。

      2、提供框架。數(shù)據(jù)驗證不是一次性工作,而是每次ETL過程中都必須做的。因此,必須有一個框架,自動化驗證過程,并提供擴展手段,讓實施人員能夠增加驗證范圍。有了這樣一個框架,其實它起到規(guī)范化操作的作用,開發(fā)實施人員可以將主要精力放在驗證腳本的編寫上,而不必過多關(guān)注驗證如何融合到流程中,如何展現(xiàn)等工作。為此,要設(shè)計一套表,類似于DM表,每次驗證結(jié)果數(shù)據(jù)都記錄其中,并且自動觸發(fā)多維分析的數(shù)據(jù)裝載、發(fā)布等。這樣,實施人員可以在每次裝載,甚至在流程過程中就可以觀察數(shù)據(jù)的誤差率。特別是,如果數(shù)據(jù)倉庫的模型能夠統(tǒng)一起來,甚至數(shù)據(jù)驗證腳本都可以確定下來,剩下的就是規(guī)范流程了。

      3、規(guī)范流程。上回提到有一種ETL數(shù)據(jù)質(zhì)量問題是由于人工處理導(dǎo)致的,其中最主要原因還是流程不規(guī)范。開發(fā)實施人員運行單獨一個ETL單元是很方便的,雖然以前曾建議一個ETL單元必須是“可重入”的,這能夠解決誤刪數(shù)據(jù),重復(fù)裝載數(shù)據(jù)問題。但要記住數(shù)據(jù)驗證也是在流程當(dāng)中,要讓數(shù)據(jù)驗證能夠日常運作,就不要讓實施者感覺到他的存在。總的來說,規(guī)范流程是提高實施效率的關(guān)鍵工作,這也是以后要繼續(xù)探求的。

      第二篇:ETL學(xué)習(xí)心得

      ETL學(xué)習(xí)心得:探求數(shù)據(jù)倉庫關(guān)鍵環(huán)節(jié)ETL的本質(zhì)

      元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),他的含義非常廣泛,這里僅指ETL的元數(shù)據(jù)。11 : 10 探求ETL本質(zhì)之六(元數(shù)據(jù)漫談)對于元數(shù)據(jù)(Metadata)的定義到目前為止沒有什么特別精彩的,這個概念非常廣,一般都是這樣定義,“元數(shù)據(jù)

      做數(shù)據(jù)倉庫系統(tǒng),ETL是關(guān)鍵的一環(huán)。說大了,ETL是數(shù)據(jù)整合解決方案,說小了,就是倒數(shù)據(jù)的工具?;貞浺幌鹿ぷ鬟@么些年來,處理數(shù)據(jù)遷移、轉(zhuǎn)換的工作倒還真的不少。但是那些工作基本上是一次性工作或者很小數(shù)據(jù)量,使用access、DTS或是自己編個小程序搞定??墒窃跀?shù)據(jù)倉庫系統(tǒng)中,ETL上升到了一定的理論高度,和原來小打小鬧的工具使用不同了。究竟什么不同,從名字上就可以看到,人家已經(jīng)將倒數(shù)據(jù)的過程分成3個步驟,E、T、L分別代表抽取、轉(zhuǎn)換和裝載。

      其實ETL過程就是數(shù)據(jù)流動的過程,從不同的數(shù)據(jù)源流向不同的目標(biāo)數(shù)據(jù)。但在數(shù)據(jù)倉庫中,ETL有幾個特點,一是數(shù)據(jù)同步,它不是一次性倒完數(shù)據(jù)就拉到,它是經(jīng)常性的活動,按照固定周期運行的,甚至現(xiàn)在還有人提出了實時ETL的概念。二是數(shù)據(jù)量,一般都是巨大的,值得你將數(shù)據(jù)流動的過程拆分成E、T和L。

      現(xiàn)在有很多成熟的工具提供ETL功能,例如datastage、powermart等,且不說他們的好壞。從應(yīng)用角度來說,ETL的過程其實不是非常復(fù)雜,這些工具給數(shù)據(jù)倉庫工程帶來和很大的便利性,特別是開發(fā)的便利和維護(hù)的便利。但另一方面,開發(fā)人員容易迷失在這些工具中。舉個例子,VB是一種非常簡單的語言并且也是非常易用的編程工具,上手特別快,但是真正VB的高手有多少?微軟設(shè)計的產(chǎn)品通常有個原則是“將使用者當(dāng)作傻瓜”,在這個原則下,微軟的東西確實非常好用,但是對于開發(fā)者,如果你自己也將自己當(dāng)作傻瓜,那就真的傻了。ETL工具也是一樣,這些工具為我們提供圖形化界面,讓我們將主要的精力放在規(guī)則上,以期提高開發(fā)效率。從使用效果來說,確實使用這些工具能夠非??焖俚貥?gòu)建一個job來處理某個數(shù)據(jù),不過從整體來看,并不見得他的整體效率會高多少。問題主要不是出在工具上,而是在設(shè)計、開發(fā)人員上。他們迷失在工具中,沒有去探求ETL的本質(zhì)。

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

      探求ETL本質(zhì)之一

      ETL的過程就是數(shù)據(jù)流動的過程,從不同異構(gòu)數(shù)據(jù)源流向統(tǒng)一的目標(biāo)數(shù)據(jù)。其間,數(shù)據(jù)的抽取、清洗、轉(zhuǎn)換和裝載形成串行或并行的過程。ETL的核心還是在于T這個過程,也就是轉(zhuǎn)換,而抽取和裝載一般可以作為轉(zhuǎn)換的輸入和輸出,或者,它們作為一個單獨的部件,其復(fù)雜度沒有轉(zhuǎn)換部件高。和OLTP系統(tǒng)中不同,那里充滿這單條記錄的insert、update和select等操作,ETL過程一般都是批量操作,例如它的裝載多采用批量裝載工具,一般都是DBMS系統(tǒng)自身附帶的工具,例如Oracle SQLLoader和DB2的autoloader等。

      ETL本身有一些特點,在一些工具中都有體現(xiàn),下面以datastage和powermart舉例來說。

      1、靜態(tài)的ETL單元和動態(tài)的ETL單元實例;一次轉(zhuǎn)換指明了某種格式的數(shù)據(jù)如何格式化成另一種格式的數(shù)據(jù),對于數(shù)據(jù)源的物理形式在設(shè)計時可以不用指定,它可以在運行時,當(dāng)這個ETL單元創(chuàng)建一個實例時才指定。對于靜態(tài)和動態(tài)的ETL單元,Datastage沒有嚴(yán)格區(qū)分,它的一個Job就是實現(xiàn)這個功能,在早期版本,一個Job同時不能運行兩次,所以一個Job相當(dāng)于一個實例,在后期版本,它支持multiple instances,而且還不是默認(rèn)選項。Powermart中將這兩個概念加以區(qū)分,靜態(tài)的叫做Mapping,動態(tài)運行時叫做Session。

      2、ETL元數(shù)據(jù);元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),他的含義非常廣泛,這里僅指ETL的元數(shù)據(jù)。主要包括每次轉(zhuǎn)換前后的數(shù)據(jù)結(jié)構(gòu)和轉(zhuǎn)換的規(guī)則。ETL元數(shù)據(jù)還包括形式參數(shù)的管理,形式參數(shù)的ETL單元定義的參數(shù),相對還有實參,它是運行時指定的參數(shù),實參不在元數(shù)據(jù)管理范圍之內(nèi)。

      3、數(shù)據(jù)流程的控制;要有可視化的流程編輯工具,提供流程定義和流程監(jiān)控功能。流程調(diào)度的最小單位是ETL單元實例,ETL單元是不能在細(xì)分的ETL過程,當(dāng)然這由開發(fā)者來控制,例如可以將抽取、轉(zhuǎn)換放在一個ETL單元中,那樣這個抽取和轉(zhuǎn)換只能同時運行,而如果將他們分作兩個單元,可以分別運行,這有利于錯誤恢復(fù)操作。當(dāng)然,ETL單元究竟應(yīng)該細(xì)分到什么程度應(yīng)該依據(jù)具體應(yīng)用來看,目前還沒有找到很好的細(xì)分策略。比如,我們可以規(guī)定將裝載一個表的功能作為一個ETL單元,但是不可否認(rèn),這樣的ETL單元之間會有很多共同的操作,例如兩個單元共用一個Hash表,要將這個Hash表裝入內(nèi)存兩次。

      4、轉(zhuǎn)換規(guī)則的定義方法;提供函數(shù)集提供常用規(guī)則方法,提供規(guī)則定義語言描述規(guī)則。

      5、對數(shù)據(jù)的快速索引;一般都是利用Hash技術(shù),將參照關(guān)系表提前裝入內(nèi)存,在轉(zhuǎn)換時查找這個hash表。Datastage中有Hash文件技術(shù),Powermart也有類似的Lookup功能。

      探求ETL本質(zhì)之二(分類)

      昨在IT-Director上閱讀一篇報告,關(guān)于ETL產(chǎn)品分類的。一般來說,我們眼中的ETL工具都是價格昂貴,能夠處理海量數(shù)據(jù)的家伙,但是這是其中的一種。它可以分成4種,針對不同的需求,主要是從轉(zhuǎn)換規(guī)則的復(fù)雜度和數(shù)據(jù)量大小來看。它們包括

      1、交互式運行環(huán)境,你可以指定數(shù)據(jù)源、目標(biāo)數(shù)據(jù),指定規(guī)則,立馬ETL。這種交互式的操作無疑非常方便,但是只能適合小數(shù)據(jù)量和復(fù)雜度不高的ETL過程,因為一旦規(guī)則復(fù)雜了,可能需要語言級的描述,不能簡簡單單拖拖拽拽就可以的。還有數(shù)據(jù)量的問題,這種交互式必然建立在解釋型語言基礎(chǔ)上,另外他的靈活性必然要犧牲一定的性能為代價。所以如果要處理海量數(shù)據(jù)的話,每次讀取一條記錄,每次對規(guī)則進(jìn)行解釋執(zhí)行,每次在寫入一條記錄,這對性能影響是非常大的。

      2、專門編碼型的,它提供了一個基于某種語言的程序框架,你可以不必將編程精力放在一些周邊的功能上,例如讀文件功能、寫數(shù)據(jù)庫的功能,而將精力主要放在規(guī)則的實現(xiàn)上面。這種近似手工代碼的性能肯定是沒話說,除非你的編程技巧不過關(guān)(這也是不可忽視的因素之一)。對于處理大數(shù)據(jù)量,處理復(fù)雜轉(zhuǎn)換邏輯,這種方式的ETL實現(xiàn)是非常直觀的。

      3、代碼生成器型的,它就像是一個ETL代碼生成器,提供簡單的圖形化界面操作,讓你拖拖拽拽將轉(zhuǎn)換規(guī)則都設(shè)定好,其實他的后臺都是生成基于某種語言的程序,要運行這個ETL過程,必須要編譯才行。Datastage就是類似這樣的產(chǎn)品,設(shè)計好的job必須要編譯,這避免了每次轉(zhuǎn)換的解釋執(zhí)行,但是不知道它生成的中間語言是什么。以前我設(shè)計的ETL工具大挪移其實也是歸屬于這一類,它提供了界面讓用戶編寫規(guī)則,最后生成C++語言,編譯后即可運行。這類工具的特點就是要在界面上下狠功夫,必須讓用戶輕松定義一個ETL過程,提供豐富的插件來完成讀、寫和轉(zhuǎn)換函數(shù)。大挪移在這方面就太弱了,規(guī)則必須手寫,而且要寫成標(biāo)準(zhǔn)c++語法,這未免還是有點難為最終用戶了,還不如做成一個專業(yè)編碼型的產(chǎn)品呢。另外一點,這類工具必須提供面向?qū)<覒?yīng)用的功能,因為它不可能考慮到所有的轉(zhuǎn)換規(guī)則和所有的讀寫,一方面提供插件接口來讓第三方編寫特定的插件,另一方面還有提供特定語言來實現(xiàn)高級功能。例如Datastage提供一種類Basic的語言,不過他的Job的腳本化實現(xiàn)好像就做的不太好,只能手工繪制job,而不能編程實現(xiàn)Job。

      4、最后還有一種類型叫做數(shù)據(jù)集線器,顧名思義,他就是像Hub一樣地工作。將這種類型分出來和上面幾種分類在標(biāo)準(zhǔn)上有所差異,上面三種更多指ETL實現(xiàn)的方法,此類主要從數(shù)據(jù)處理角度。目前有一些產(chǎn)品屬于EAI(Enterprise Application Integration),它的數(shù)據(jù)集成主要是一種準(zhǔn)實時性。所以這類產(chǎn)品就像Hub一樣,不斷接收各種異構(gòu)數(shù)據(jù)源來的數(shù)據(jù),經(jīng)過處理,在實施發(fā)送到不同的目標(biāo)數(shù)據(jù)中去。

      雖然,這些類看似各又千秋,特別在BI項目中,面對海量數(shù)據(jù)的ETL時,中間兩種的選擇就開始了,在選擇過程中,必須要考慮到開發(fā)效率、維護(hù)方面、性能、學(xué)習(xí)曲線、人員技能等各方面因素,當(dāng)然還有最重要也是最現(xiàn)實的因素就是客戶的意象。

      探求ETL本質(zhì)之三(轉(zhuǎn)換)

      ETL探求之一中提到,ETL過程最復(fù)雜的部分就是T,這個轉(zhuǎn)換過程,T過程究竟有哪些類型呢?

      一、宏觀輸入輸出

      從對數(shù)據(jù)源的整個宏觀處理分,看看一個ETL過程的輸入輸出,可以分成下面幾類:

      1、大小交,這種處理在數(shù)據(jù)清洗過程是常見了,例如從數(shù)據(jù)源到ODS階段,如果數(shù)據(jù)倉庫采用維度建模,而且維度基本采用代理鍵的話,必然存在代碼到此鍵值的轉(zhuǎn)換。如果用SQL實現(xiàn),必然需要將一個大表和一堆小表都Join起來,當(dāng)然如果使用ETL工具的話,一般都是先將小表讀入內(nèi)存中再處理。這種情況,輸出數(shù)據(jù)的粒度和大表一樣。

      2、大大交,大表和大表之間關(guān)聯(lián)也是一個重要的課題,當(dāng)然其中要有一個主表,在邏輯上,應(yīng)當(dāng)是主表Left Join輔表。大表之間的關(guān)聯(lián)存在最大的問題就是性能和穩(wěn)定性,對于海量數(shù)據(jù)來說,必須有優(yōu)化的方法來處理他們的關(guān)聯(lián),另外,對于大數(shù)據(jù)的處理無疑會占用太多的系統(tǒng)資源,出錯的幾率非常大,如何做到有效錯誤恢復(fù)也是個問題。對于這種情況,我們建議還是盡量將大表拆分成適度的稍小一點的表,形成大小交的類型。這類情況的輸出數(shù)據(jù)粒度和主表一樣。

      3、站著進(jìn)來,躺著出去。事務(wù)系統(tǒng)中為了提高系統(tǒng)靈活性和擴展性,很多信息放在代碼表中維護(hù),所以它的“事實表”就是一種窄表,而在數(shù)據(jù)倉庫中,通常要進(jìn)行寬化,從行變成列,所以稱這種處理情況叫做“站著進(jìn)來,躺著出去”。大家對Decode肯定不陌生,這是進(jìn)行寬表化常見的手段之一。窄表變寬表的過程主要體現(xiàn)在對窄表中那個代碼字段的操作。這種情況,窄表是輸入,寬表是輸出,寬表的粒度必定要比窄表粗一些,就粗在那個代碼字段上。

      4、聚集。數(shù)據(jù)倉庫中重要的任務(wù)就是沉淀數(shù)據(jù),聚集是必不可少的操作,它是粗化數(shù)據(jù)粒度的過程。聚集本身其實很簡單,就是類似SQL中Group by的操作,選取特定字段(維度),對度量字段再使用某種聚集函數(shù)。但是對于大數(shù)據(jù)量情況下,聚集算法的優(yōu)化仍是探究的一個課題。例如是直接使用SQL的Group by,還是先排序,在處理。

      二、微觀規(guī)則

      從數(shù)據(jù)的轉(zhuǎn)換的微觀細(xì)節(jié)分,可以分成下面的幾個基本類型,當(dāng)然還有一些復(fù)雜的組合情況,例如先運算,在參照轉(zhuǎn)換的規(guī)則,這種基于基本類型組合的情況就不在此列了。ETL的規(guī)則是依賴目標(biāo)數(shù)據(jù)的,目標(biāo)數(shù)據(jù)有多少字段,就有多少條規(guī)則。

      1、直接映射,原來是什么就是什么,原封不動照搬過來,對這樣的規(guī)則,如果數(shù)據(jù)源字段和目標(biāo)字段長度或精度不符,需要特別注意看是否真的可以直接映射還是需要做一些簡單運算。

      2、字段運算,數(shù)據(jù)源的一個或多個字段進(jìn)行數(shù)學(xué)運算得到的目標(biāo)字段,這種規(guī)則一般對數(shù)值型字段而言。

      3、參照轉(zhuǎn)換,在轉(zhuǎn)換中通常要用數(shù)據(jù)源的一個或多個字段作為Key,去一個關(guān)聯(lián)數(shù)組中去搜索特定值,而且應(yīng)該只能得到唯一值。這個關(guān)聯(lián)數(shù)組使用Hash算法實現(xiàn)是比較合適也是最常見的,在整個ETL開始之前,它就裝入內(nèi)存,對性能提高的幫助非常大。

      4、字符串處理,從數(shù)據(jù)源某個字符串字段中經(jīng)常可以獲取特定信息,例如身份證號。而且,經(jīng)常會有數(shù)值型值以字符串形式體現(xiàn)。對字符串的操作通常有類型轉(zhuǎn)換、字符串截取等。但是由于字符類型字段的隨意性也造成了臟數(shù)據(jù)的隱患,所以在處理這種規(guī)則的時候,一定要加上異常處理。

      5、空值判斷,對于空值的處理是數(shù)據(jù)倉庫中一個常見問題,是將它作為臟數(shù)據(jù)還是作為特定一種維成員?這恐怕還要看應(yīng)用的情況,也是需要進(jìn)一步探求的。但是無論怎樣,對于可能有NULL值的字段,不要采用“直接映射”的規(guī)則類型,必須對空值進(jìn)行判斷,目前我們的建議是將它轉(zhuǎn)換成特定的值。

      6、日期轉(zhuǎn)換,在數(shù)據(jù)倉庫中日期值一般都會有特定的,不同于日期類型值的表示方法,例如使用8位整型20040801表示日期。而在數(shù)據(jù)源中,這種字段基本都是日期類型的,所以對于這樣的規(guī)則,需要一些共通函數(shù)來處理將日期轉(zhuǎn)換為8位日期值、6位月份值等。

      7、日期運算,基于日期,我們通常會計算日差、月差、時長等。一般數(shù)據(jù)庫提供的日期運算函數(shù)都是基于日期型的,而在數(shù)據(jù)倉庫中采用特定類型來表示日期的話,必須有一套自己的日期運算函數(shù)集。

      8、聚集運算,對于事實表中的度量字段,他們通常是通過數(shù)據(jù)源一個或多個字段運用聚集函數(shù)得來的,這些聚集函數(shù)為SQL標(biāo)準(zhǔn)中,包括sum,count,avg,min,max。

      9、既定取值,這種規(guī)則和以上各種類型規(guī)則的差別就在于它不依賴于數(shù)據(jù)源字段,對目標(biāo)字段取一個固定的或是依賴系統(tǒng)的值。

      探求ETL本質(zhì)之四(數(shù)據(jù)質(zhì)量)

      “不要絕對的數(shù)據(jù)準(zhǔn)確,但要知道為什么不準(zhǔn)確?!?/p>

      這是我們在構(gòu)建BI系統(tǒng)是對數(shù)據(jù)準(zhǔn)確性的要求。確實,對絕對的數(shù)據(jù)準(zhǔn)確誰也沒有把握,不僅是系統(tǒng)集成商,包括客戶也是無法確定。準(zhǔn)確的東西需要一個標(biāo)準(zhǔn),但首先要保證這個標(biāo)準(zhǔn)是準(zhǔn)確的,至少現(xiàn)在還沒有這樣一個標(biāo)準(zhǔn)??蛻魰岢鲆粋€相對標(biāo)準(zhǔn),例如將你的OLAP數(shù)據(jù)結(jié)果和報表結(jié)果對比。雖然這是一種不太公平的比較,你也只好認(rèn)了吧。

      首先在數(shù)據(jù)源那里,已經(jīng)很難保證數(shù)據(jù)質(zhì)量了,這一點也是事實。在這一層有哪些可能原因?qū)е聰?shù)據(jù)質(zhì)量問題?可以分為下面幾類:

      1、數(shù)據(jù)格式錯誤,例如缺失數(shù)據(jù)、數(shù)據(jù)值超出范圍或是數(shù)據(jù)格式非法等。要知道對于同樣處理大數(shù)據(jù)量的數(shù)據(jù)源系統(tǒng),他們通常會舍棄一些數(shù)據(jù)庫自身的檢查機制,例如字段約束等。他們盡可能將數(shù)據(jù)檢查在入庫前保證,但是這一點是很難確保的。這類情況諸如身份證號碼、手機號、非日期類型的日期字段等。

      2、數(shù)據(jù)一致性,同樣,數(shù)據(jù)源系統(tǒng)為了性能的考慮,會在一定程度上舍棄外鍵約束,這通常會導(dǎo)致數(shù)據(jù)不一致。例如在帳務(wù)表中會出現(xiàn)一個用戶表中沒有的用戶ID,在例如有些代碼在代碼表中找不到等。

      3、業(yè)務(wù)邏輯的合理性,這一點很難說對與錯。通常,數(shù)據(jù)源系統(tǒng)的設(shè)計并不是非常嚴(yán)謹(jǐn),例如讓用戶開戶日期晚于用戶銷戶日期都是有可能發(fā)生的,一個用戶表中存在多個用戶ID也是有可能發(fā)生的。對這種情況,有什么辦法嗎?

      構(gòu)建一個BI系統(tǒng),要做到完全理解數(shù)據(jù)源系統(tǒng)根本就是不可能的。特別是數(shù)據(jù)源系統(tǒng)在交付后,有更多維護(hù)人員的即興發(fā)揮,那更是要花大量的時間去尋找原因。以前曾經(jīng)爭辯過設(shè)計人員對規(guī)則描述的問題,有人提出要在ETL開始之前務(wù)必將所有的規(guī)則弄得一清二楚。我并不同意這樣的意見,倒是認(rèn)為在ETL過程要有處理這些質(zhì)量有問題數(shù)據(jù)的保證。一定要正面這些臟數(shù)據(jù),是丟棄還是處理,無法逃避。如果沒有質(zhì)量保證,那么在這個過程中,錯誤會逐漸放大,拋開數(shù)據(jù)源質(zhì)量問題,我們再來看看ETL過程中哪些因素對數(shù)據(jù)準(zhǔn)確性產(chǎn)生重大影響。

      1、規(guī)則描述錯誤。上面提到對設(shè)計人員對數(shù)據(jù)源系統(tǒng)理解的不充分,導(dǎo)致規(guī)則理解錯誤,這是一方面。另一方面,是規(guī)則的描述,如果無二義性地描述規(guī)則也是要探求的一個課題。規(guī)則是依附于目標(biāo)字段的,在探求之三中,提到規(guī)則的分類。但是規(guī)則總不能總是用文字描述,必須有嚴(yán)格的數(shù)學(xué)表達(dá)方式。我甚至想過,如果設(shè)計人員能夠使用某種規(guī)則語言來描述,那么我們的ETL單元就可以自動生成、同步,省去很多手工操作了。

      2、ETL開發(fā)錯誤。即時規(guī)則很明確,ETL開發(fā)的過程中也會發(fā)生一些錯誤,例如邏輯錯誤、書寫錯誤等。例如對于一個分段值,開區(qū)間閉區(qū)間是需要指定的,但是常常開發(fā)人員沒注意,一個大于等于號寫成大于號就導(dǎo)致數(shù)據(jù)錯誤。

      3、人為處理錯誤。在整體ETL流程沒有完成之前,為了圖省事,通常會手工運行ETL過程,這其中一個重大的問題就是你不會按照正常流程去運行了,而是按照自己的理解去運行,發(fā)生的錯誤可能是誤刪了數(shù)據(jù)、重復(fù)裝載數(shù)據(jù)等。

      探求ETL本質(zhì)之五(質(zhì)量保證)

      上回提到ETL數(shù)據(jù)質(zhì)量問題,這是無法根治的,只能采取特定的手段去盡量避免,而且必須要定義出度量方法來衡量數(shù)據(jù)的質(zhì)量是好還是壞。對于數(shù)據(jù)源的質(zhì)量,客戶對此應(yīng)該更加關(guān)心,如果在這個源頭不能保證比較干凈的數(shù)據(jù),那么后面的分析功能的可信度也都成問題。數(shù)據(jù)源系統(tǒng)也在不斷進(jìn)化過程中,客戶的操作也在逐漸規(guī)范中,BI系統(tǒng)也同樣如此。本文探討一下對數(shù)據(jù)源質(zhì)量和ETL處理質(zhì)量的應(yīng)對方法。

      如何應(yīng)對數(shù)據(jù)源的質(zhì)量問題?記得在onteldatastage列表中也討論過一個話題-”-1的處理",在數(shù)據(jù)倉庫模型維表中,通常有一條-1記錄,表示“未知”,這個未知含義可廣了,任何可能出錯的數(shù)據(jù),NULL數(shù)據(jù)甚至是規(guī)則沒有涵蓋到的數(shù)據(jù),都轉(zhuǎn)成-1。這是一種處理臟數(shù)據(jù)的方法,但這也是一種掩蓋事實的方法。就好像寫一個函數(shù)FileOpen(filename),返回一個錯誤碼,當(dāng)然,你可以只返回一種錯誤碼,如-1,但這是一種不好的設(shè)計,對于調(diào)用者來說,他需要依據(jù)這個錯誤碼進(jìn)行某些判斷,例如是文件不存在,還是讀取權(quán)限不夠,都有相應(yīng)的處理邏輯。數(shù)據(jù)倉庫中也是一樣,所以,建議將不同的數(shù)據(jù)質(zhì)量類型處理結(jié)果分別轉(zhuǎn)換成不同的值,譬如,在轉(zhuǎn)換后,-1表示參照不上,-2表示NULL數(shù)據(jù)等。不過這僅僅對付了上回提到的第一類錯誤,數(shù)據(jù)格式錯誤。對于數(shù)據(jù)一致性和業(yè)務(wù)邏輯合理性問題,這仍有待探求。但這里有一個原則就是“必須在數(shù)據(jù)倉庫中反應(yīng)數(shù)據(jù)源的質(zhì)量”。

      對于ETL過程中產(chǎn)生的質(zhì)量問題,必須有保障手段。從以往的經(jīng)驗看,沒有保障手段給實施人員帶來麻煩重重。實施人員對于反復(fù)裝載數(shù)據(jù)一定不會陌生,甚至是最后數(shù)據(jù)留到最后的Cube,才發(fā)現(xiàn)了第一步ETL其實已經(jīng)錯了。這個保障手段就是數(shù)據(jù)驗證機制,當(dāng)然,它的目的是能夠在ETL過程中監(jiān)控數(shù)據(jù)質(zhì)量,產(chǎn)生報警。這個模塊要將實施人員當(dāng)作是最終用戶,可以說他們是數(shù)據(jù)驗證機制的直接收益者。首先,必須有一個對質(zhì)量的度量方法,什么是高質(zhì)什么是低質(zhì),不能靠感官感覺,但這卻是在沒有度量方法條件下通常的做法。那經(jīng)營分析系統(tǒng)來說,聯(lián)通總部曾提出測試規(guī)范,這其實就是一種度量方法,例如指標(biāo)的誤差范圍不能高于5%等,對系統(tǒng)本身來說其實必須要有這樣的度量方法,先不要說這個度量方法是否科學(xué)。對于ETL數(shù)據(jù)處理質(zhì)量,他的度量方法應(yīng)該比聯(lián)通總部測試規(guī)范定義的方法更要嚴(yán)格,因為他更多將BI系統(tǒng)看作一個黑盒子,從數(shù)據(jù)源到展現(xiàn)的數(shù)據(jù)誤差允許一定的誤差。而ETL數(shù)據(jù)處理質(zhì)量度量是一種白盒的度量,要注重每一步過程。因此理論上,要求輸入輸出的指標(biāo)應(yīng)該完全一致。但是我們必須正面完全一致只是理想,對于有誤差的數(shù)據(jù),必須找到原因。

      在質(zhì)量度量方法的前提下,就可以建立一個數(shù)據(jù)驗證框架。此框架依據(jù)總量、分量數(shù)據(jù)稽核方法,該方法在高的《數(shù)據(jù)倉庫中的數(shù)據(jù)稽核技術(shù)》一文中已經(jīng)指出。作為補充,下面提出幾點功能上的建議:

      1、提供前端。將開發(fā)實施人員當(dāng)作用戶,同樣也要為之提供友好的用戶界面?!痘思夹g(shù)》一文中指出測試報告的形式,這種形式還是要依賴人為判斷,在一堆數(shù)據(jù)中去找規(guī)律。到不如用OLAP的方式提供界面,不光是加上測試統(tǒng)計出來的指標(biāo)結(jié)果,并且配合度量方法的計算。例如誤差率,對于誤差率為大于0的指標(biāo),就要好好查一下原因了。

      2、提供框架。數(shù)據(jù)驗證不是一次性工作,而是每次ETL過程中都必須做的。因此,必須有一個框架,自動化驗證過程,并提供擴展手段,讓實施人員能夠增加驗證范圍。有了這樣一個框架,其實它起到規(guī)范化操作的作用,開發(fā)實施人員可以將主要精力放在驗證腳本的編寫上,而不必過多關(guān)注驗證如何融合到流程中,如何展現(xiàn)等工作。為此,要設(shè)計一套表,類似于DM表,每次驗證結(jié)果數(shù)據(jù)都記錄其中,并且自動觸發(fā)多維分析的數(shù)據(jù)裝載、發(fā)布等。這樣,實施人員可以在每次裝載,甚至在流程過程中就可以觀察數(shù)據(jù)的誤差率。特別是,如果數(shù)據(jù)倉庫的模型能夠統(tǒng)一起來,甚至數(shù)據(jù)驗證腳本都可以確定下來,剩下的就是規(guī)范流程了。

      3、規(guī)范流程。上回提到有一種ETL數(shù)據(jù)質(zhì)量問題是由于人工處理導(dǎo)致的,其中最主要原因還是流程不規(guī)范。開發(fā)實施人員運行單獨一個ETL單元是很方便的,雖然以前曾建議一個ETL單元必須是“可重入”的,這能夠解決誤刪數(shù)據(jù),重復(fù)裝載數(shù)據(jù)問題。但要記住數(shù)據(jù)驗證也是在流程當(dāng)中,要讓數(shù)據(jù)驗證能夠日常運作,就不要讓實施者感覺到他的存在??偟膩碚f,規(guī)范流程是提高實施效率的關(guān)鍵工作,這也是以后要繼續(xù)探求的。

      探求ETL本質(zhì)之六(元數(shù)據(jù)漫談)

      對于元數(shù)據(jù)(Metadata)的定義到目前為止沒有什么特別精彩的,這個概念非常廣,一般都是這樣定義,“元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù)(Data about Data)”,這造成一種遞歸定義,就像問小強住在哪里,答,在旺財隔壁。按照這樣的定義,元數(shù)據(jù)所描述的數(shù)據(jù)是什么呢?還是元數(shù)據(jù)。這樣就可能有元元元...元數(shù)據(jù)。我還聽說過一種對元數(shù)據(jù),如果說數(shù)據(jù)是一抽屜檔案,那么元數(shù)據(jù)就是分類標(biāo)簽。那它和索引有什么區(qū)別? 元數(shù)據(jù)體現(xiàn)是一種抽象,哲學(xué)家從古至今都在抽象這個世界,力圖找到世界的本質(zhì)。抽象不是一層關(guān)系,它是一種逐步由具體到一般的過程。例如我->男人->人->哺乳動物->生物這就是一個抽象過程,你要是在軟件業(yè)混會發(fā)現(xiàn)這個例子很常見,面向?qū)ο蠓椒ň褪沁@樣一種抽象過程。它對世界中的事物、過程進(jìn)行抽象,使用面向?qū)ο蠓椒?,?gòu)建一套對象模型。同樣在面向?qū)ο蠓椒ㄖ?,類是對象的抽象,接口又是對類的抽象。因此,我認(rèn)為可以將“元”和“抽象”換一下,叫抽象數(shù)據(jù)是不是好理解一些。

      常聽到這樣的話,“xx領(lǐng)導(dǎo)的講話高屋建瓴,給我們后面的工作指引的清晰的方向”,這個成語“高屋建瓴”,站在10樓往下到水,居高臨下,能砸死人,這是指站在一定的高度看待事物,這個一定的高度就是指他有夠“元”。在設(shè)計模式中,強調(diào)要對接口編程,就是說你不要處理這類對象和那類對象的交互,而要處理這個接口和那個接口的交互,先別管他們內(nèi)部是怎么干的。元數(shù)據(jù)存在的意義也在于此,雖然上面說了一通都撤到哲學(xué)上去,但這個詞必須還是要結(jié)合軟件設(shè)計中看,我不知道在別的領(lǐng)域是不是存在Metadata這樣的叫法,雖然我相信別的領(lǐng)域必然有類似的東東。元數(shù)據(jù)的存在就是要做到在更高抽象一層設(shè)計軟件。這肯定有好處,什么靈活性啊,擴展性啊,可維護(hù)性啊,都能得到提高,而且架構(gòu)清晰,只是彎彎太多,要是從下往上看,太復(fù)雜了。很早以前,我曾看過backorifice的代碼,我靠,一個簡單的功能,從這個類轉(zhuǎn)到父類,又轉(zhuǎn)到父類,很不理解,為什么一個簡單的功能不在一個類的方法中實現(xiàn)就拉到了呢?現(xiàn)在想想,還真不能這樣,這雖然使代碼容易看懂了,但是結(jié)構(gòu)確實混亂的,那他只能干現(xiàn)在的事,如果有什么功能擴展,這些代碼就廢了。

      我從98年剛工作時就開始接觸元數(shù)據(jù)的概念,當(dāng)時叫做元數(shù)據(jù)驅(qū)動的系統(tǒng)架構(gòu),后來在QiDSS中也用到這個概念構(gòu)建QiNavigator,但是現(xiàn)在覺得元數(shù)據(jù)也沒啥,不就是建一堆表描述界面的元素,再利用這些數(shù)據(jù)自動生成界面嗎。到了數(shù)據(jù)倉庫系統(tǒng)中,這個概念更強了,是數(shù)據(jù)倉庫中一個重要的部分。但是至今,我還是認(rèn)為這個概念過于玄乎,看不到實際的東西,市面上有一些元數(shù)據(jù)管理的東西,但是從應(yīng)用情況就得知,用的不多。之所以玄乎,就是因為抽象層次沒有分清楚,關(guān)鍵就是對于元數(shù)據(jù)的分類(這種分類就是一種抽象過程)和元數(shù)據(jù)的使用。你可以將元數(shù)據(jù)抽象成0和1,但是那樣對你的業(yè)務(wù)有用嗎?必須還得抽象到適合的程度,最后問題還是“度”。

      數(shù)據(jù)倉庫系統(tǒng)的元數(shù)據(jù)作用如何?還不就是使系統(tǒng)自動運轉(zhuǎn),易于管理嗎?要做到這一步,可沒必要將系統(tǒng)抽象到太極、兩儀、八卦之類的,業(yè)界也曾定義過一些元數(shù)據(jù)規(guī)范,向CWM、XMI等等,可以借鑒,不過俺對此也是不精通的說,以后再說

      第三篇:ETL問題總結(jié)

      1.如果kettle端使用readonly賬號登錄SQLServer服務(wù)器,調(diào)用DB中的一個sp(傳入?yún)?shù)并寫入到該DB的表中),1.1只讀賬號能將參數(shù)能傳入sp中嗎? 1.2如果能傳入,sp能執(zhí)行寫入操作嗎?

      2.關(guān)于各種變量、參數(shù)的設(shè)置聲明,傳入?yún)?shù),取出參數(shù)的問題

      2.1在kettle端圖形界面,有一種能用“CTR+ALT+空格”來選擇的變量,這是什么變量?為什么在總job中的 “設(shè)置變量”控件中,用“CTR+ALT+空格”來選擇,該變量既能作為變量名來被選擇,又能作為屬性文件名來被選擇?(在轉(zhuǎn)換中該變量只能作為變量名被選擇)其中的一個變量(END_TIME)是通過設(shè)置設(shè)置變量設(shè)置JVM產(chǎn)生的,但是它一直存在里面,這些變量可以在哪里管理,比如實現(xiàn)刪除END_TIME變量的操作。如下圖。

      2.2除了kettle.properties一個job可以使用其他自定義的properties設(shè)置文件嗎?(已解決)

      2.3 命名參數(shù)怎么設(shè)置,怎么傳入?yún)?shù)怎么獲取參數(shù),總控job的命名參數(shù),和轉(zhuǎn)換的命名參數(shù)有什么區(qū)別?(已解決)通過點擊job或者轉(zhuǎn)換的屬性可以設(shè)置命名參數(shù).可以同時指定默認(rèn)值,不指定的話就要 可以使用,只要指定路徑,文件名,就能讀取到自定義配置文件中的配置參數(shù).在運行job時輸入.總控Job的命名參數(shù)在整個job包括其中的控件,子job中都有效,而轉(zhuǎn)換的命名參數(shù)只在該轉(zhuǎn)換中有效.3.sp參數(shù)傳入對參數(shù)有什么要求嗎.(已解決)

      要求的參數(shù):順序上符合sp的參數(shù);類型要對的上 格式要對得上

      例如:時間的類型,sp中要求datetime型的參數(shù),且格式要求為:yyyy/MM/ddHH:mm:ss

      ;參數(shù)從數(shù)據(jù)庫的一張表中獲得(表輸入->設(shè)置變量->獲取變量).變量獲取過來后是date型,但是沒有指定格式,因此需要在獲取變量中設(shè)置其格式為sp要求的格式.

      第四篇:ETL學(xué)習(xí)心得:探求數(shù)據(jù)倉庫關(guān)鍵環(huán)節(jié)ETL的本質(zhì)

      做數(shù)據(jù)倉庫系統(tǒng),ETL是關(guān)鍵的一環(huán)。說大了,ETL是數(shù)據(jù)整合解決方案,說小了,就是倒數(shù)據(jù)的工具?;貞浺幌鹿ぷ鬟@么些年來,處理數(shù)據(jù)遷移、轉(zhuǎn)換的工作倒還真的不少。但是那些工作基本上是一次性工作或者很小數(shù)據(jù)量,使用access、DTS或是自己編個小程序搞定??墒窃跀?shù)據(jù)倉庫系統(tǒng)中,ETL上升到了一定的理論高度,和原來小打小鬧的工具使用不同了。究竟什么不同,從名字上就可以看到,人家已經(jīng)將倒數(shù)據(jù)的過程分成3個步驟,E、T、L分別代表抽取、轉(zhuǎn)換和裝載。

      其實ETL過程就是數(shù)據(jù)流動的過程,從不同的數(shù)據(jù)源流向不同的目標(biāo)數(shù)據(jù)。但在數(shù)據(jù)倉庫中,ETL有幾個特點,一是數(shù)據(jù)同步,它不是一次性倒完數(shù)據(jù)就拉到,它是經(jīng)常性的活動,按照固定周期運行的,甚至現(xiàn)在還有人提出了實時ETL的概念。二是數(shù)據(jù)量,一般都是巨大的,值得你將數(shù)據(jù)流動的過程拆分成E、T和L。

      現(xiàn)在有很多成熟的工具提供ETL功能,例如datastage、powermart等,且不說他們的好壞。從應(yīng)用角度來說,ETL的過程其實不是非常復(fù)雜,這些工具給數(shù)據(jù)倉庫工程帶來和很大的便利性,特別是開發(fā)的便利和維護(hù)的便利。但另一方面,開發(fā)人員容易迷失在這些工具中。舉個例子,VB是一種非常簡單的語言并且也是非常易用的編程工具,上手特別快,但是真正VB的高手有多少?微軟設(shè)計的產(chǎn)品通常有個原則是“將使用者當(dāng)作傻瓜”,在這個原則下,微軟的東西確實非常好用,但是對于開發(fā)者,如果你自己也將自己當(dāng)作傻瓜,那就真的傻了。ETL工具也是一樣,這些工具為我們提供圖形化界面,讓我們將主要的精力放在規(guī)則上,以期提高開發(fā)效率。從使用效果來說,確實使用這些工具能夠非??焖俚貥?gòu)建一個job來處理某個數(shù)據(jù),不過從整體來看,并不見得他的整體效率會高多少。問題主要不是出在工具上,而是在設(shè)計、開發(fā)人員上。他們迷失在工具中,沒有去探求ETL的本質(zhì)。

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

      探求ETL本質(zhì)之一

      ETL的過程就是數(shù)據(jù)流動的過程,從不同異構(gòu)數(shù)據(jù)源流向統(tǒng)一的目標(biāo)數(shù)據(jù)。其間,數(shù)據(jù)的抽取、清洗、轉(zhuǎn)換和裝載形成串行或并行的過程。ETL的核心還是在于T這個過程,也就是轉(zhuǎn)換,而抽取和裝載一般可以作為轉(zhuǎn)換的輸入和輸出,或者,它們作為一個單獨的部件,其復(fù)雜度沒有轉(zhuǎn)換部件高。和OLTP系統(tǒng)中不同,那里充滿這單條記錄的insert、update和select等操作,ETL過程一般都是批量操作,例如它的裝載多采用批量裝載工具,一般都是DBMS系統(tǒng)自身附帶的工具,例如Oracle SQLLoader和DB2的autoloader等。

      ETL本身有一些特點,在一些工具中都有體現(xiàn),下面以datastage和powermart舉例來說。

      1、靜態(tài)的ETL單元和動態(tài)的ETL單元實例;一次轉(zhuǎn)換指明了某種格式的數(shù)據(jù)如何格式化成另一種格式的數(shù)據(jù),對于數(shù)據(jù)源的物理形式在設(shè)計時可以不用指定,它可以在運行時,當(dāng)這個ETL單元創(chuàng)建一個實例時才指定。對于靜態(tài)和動態(tài)的ETL單元,Datastage沒有嚴(yán)格區(qū)分,它的一個Job就是實現(xiàn)這個功能,在早期版本,一個Job同時不能運行兩次,所以一個Job相當(dāng)于一個實例,在后期版本,它支持multiple instances,而且還不是默認(rèn)選項。Powermart中將這兩個概念加以區(qū)分,靜態(tài)的叫做Mapping,動態(tài)運行時叫做Session。

      2、ETL元數(shù)據(jù);元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù),他的含義非常廣泛,這里僅指ETL的元數(shù)據(jù)。主要包括每次轉(zhuǎn)換前后的數(shù)據(jù)結(jié)構(gòu)和轉(zhuǎn)換的規(guī)則。ETL元數(shù)據(jù)還包括形式參數(shù)的管理,形式參數(shù)的ETL單元定義的參數(shù),相對還有實參,它是運行時指定的參數(shù),實參不在元數(shù)據(jù)管理范圍之內(nèi)。

      3、數(shù)據(jù)流程的控制;要有可視化的流程編輯工具,提供流程定義和流程監(jiān)控功能。流程調(diào)度的最小單位是ETL單元實例,ETL單元是不能在細(xì)分的ETL過程,當(dāng)然這由開發(fā)者來控制,例如可以將抽取、轉(zhuǎn)換放在一個ETL單元中,那樣這個抽取和轉(zhuǎn)換只能同時運行,而如果將他們分作兩個單元,可以分別運行,這有利于錯誤恢復(fù)操作。當(dāng)然,ETL單元究竟應(yīng)該細(xì)分到什么程度應(yīng)該依據(jù)具體應(yīng)用來看,目前還沒有找到很好的細(xì)分策略。比如,我們可以規(guī)定將裝載一個表的功能作為一個ETL單元,但是不可否認(rèn),這樣的ETL單元之間會有很多共同的操作,例如兩個單元共用一個Hash表,要將這個Hash表裝入內(nèi)存兩次。

      4、轉(zhuǎn)換規(guī)則的定義方法;提供函數(shù)集提供常用規(guī)則方法,提供規(guī)則定義語言描述規(guī)則。

      5、對數(shù)據(jù)的快速索引;一般都是利用Hash技術(shù),將參照關(guān)系表提前裝入內(nèi)存,在轉(zhuǎn)換時查找這個hash表。Datastage中有Hash文件技術(shù),Powermart也有類似的Lookup功能。

      探求ETL本質(zhì)之二(分類)

      昨在IT-Director上閱讀一篇報告,關(guān)于ETL產(chǎn)品分類的。一般來說,我們眼中的ETL工具都是價格昂貴,能夠處理海量數(shù)據(jù)的家伙,但是這是其中的一種。它可以分成4種,針對不同的需求,主要是從轉(zhuǎn)換規(guī)則的復(fù)雜度和數(shù)據(jù)量大小來看。它們包括

      1、交互式運行環(huán)境,你可以指定數(shù)據(jù)源、目標(biāo)數(shù)據(jù),指定規(guī)則,立馬ETL。這種交互式的操作無疑非常方便,但是只能適合小數(shù)據(jù)量和復(fù)雜度不高的ETL過程,因為一旦規(guī)則復(fù)雜了,可能需要語言級的描述,不能簡簡單單拖拖拽拽就可以的。還有數(shù)據(jù)量的問題,這種交互式必然建立在解釋型語言基礎(chǔ)上,另外他的靈活性必然要犧牲一定的性能為代價。所以如果要處理海量數(shù)據(jù)的話,每次讀取一條記錄,每次對規(guī)則進(jìn)行解釋執(zhí)行,每次在寫入一條記錄,這對性能影響是非常大的。

      2、專門編碼型的,它提供了一個基于某種語言的程序框架,你可以不必將編程精力放在一些周邊的功能上,例如讀文件功能、寫http://rad.17luntan.com/ClickPortal/W...&alliedsiteid=0“);” onmouseout=“isShowAds = false;isShowAds2 = false;”>數(shù)據(jù)庫的功能,而將精力主要放在規(guī)則的實現(xiàn)上面。這種近似手工代碼的性能肯定是沒話說,除非你的編程技巧不過關(guān)(這也是不可忽視的因素之一)。對于處理大數(shù)據(jù)量,處理復(fù)雜轉(zhuǎn)換邏輯,這種方式的ETL實現(xiàn)是非常直觀的。

      3、代碼生成器型的,它就像是一個ETL代碼生成器,提供簡單的圖形化界面操作,讓你拖拖拽拽將轉(zhuǎn)換規(guī)則都設(shè)定好,其實他的后臺都是生成基于某種語言的程序,要運行這個ETL過程,必須要編譯才行。Datastage就是類似這樣的產(chǎn)品,設(shè)計好的job必須要編譯,這避免了每次轉(zhuǎn)換的解釋執(zhí)行,但是不知道它生成的中間語言是什么。以前我設(shè)計的ETL工具大挪移其實也是歸屬于這一類,它提供了界面讓用戶編寫規(guī)則,最后生成C++語言,編譯后即可運行。這類工具的特點就是要在界面上下狠功夫,必須讓用戶輕松定義一個ETL過程,提供豐富的插件來完成讀、寫和轉(zhuǎn)換函數(shù)。大挪移在這方面就太弱了,規(guī)則必須手寫,而且要寫成標(biāo)準(zhǔn)c++語法,這未免還是有點難為最終用戶了,還不如做成一個專業(yè)編碼型的產(chǎn)品呢。另外一點,這類工具必須提供面向?qū)<覒?yīng)用的功能,因為它不可能考慮到所有的轉(zhuǎn)換規(guī)則和所有的讀寫,一方面提供插件接口來讓第三方編寫特定的插件,另一方面還有提供特定語言來實現(xiàn)高級功能。例如Datastage提供一種類Basic的語言,不過他的Job的腳本化實現(xiàn)好像就做的不太好,只能手工繪制job,而不能編程實現(xiàn)Job。

      4、最后還有一種類型叫做數(shù)據(jù)集線器,顧名思義,他就是像Hub一樣地工作。將這種類型分出來和上面幾種分類在標(biāo)準(zhǔn)上有所差異,上面三種更多指ETL實現(xiàn)的方法,此類主要從數(shù)據(jù)處理角度。目前有一些產(chǎn)品屬于EAI(Enterprise Application Integration),它的數(shù)據(jù)集成主要是一種準(zhǔn)實時性。所以這類產(chǎn)品就像Hub一樣,不斷接收各種異構(gòu)數(shù)據(jù)源來的數(shù)據(jù),經(jīng)過處理,在實施發(fā)送到不同的目標(biāo)數(shù)據(jù)中去。

      雖然,這些類看似各又千秋,特別在BI項目中,面對海量數(shù)據(jù)的ETL時,中間兩種的選擇就開始了,在選擇過程中,必須要考慮到開發(fā)效率、維護(hù)方面、性能、學(xué)習(xí)曲線、人員技能等各方面因素,當(dāng)然還有最重要也是最現(xiàn)實的因素就是客戶的意象。

      探求ETL本質(zhì)之三(轉(zhuǎn)換)

      ETL探求之一中提到,ETL過程最復(fù)雜的部分就是T,這個轉(zhuǎn)換過程,T過程究竟有哪些類型呢?

      一、宏觀輸入輸出

      從對數(shù)據(jù)源的整個宏觀處理分,看看一個ETL過程的輸入輸出,可以分成下面幾類:

      1、大小交,這種處理在數(shù)據(jù)清洗過程是常見了,例如從數(shù)據(jù)源到ODS階段,如果數(shù)據(jù)倉庫采用維度建模,而且維度基本采用代理鍵的話,必然存在代碼到此鍵值的轉(zhuǎn)換。如果用SQL實現(xiàn),必然需要將一個大表和一堆小表都Join起來,當(dāng)然如果使用ETL工具的話,一般都是先將小表讀入內(nèi)存中再處理。這種情況,輸出數(shù)據(jù)的粒度和大表一樣。

      2、大大交,大表和大表之間關(guān)聯(lián)也是一個重要的課題,當(dāng)然其中要有一個主表,在邏輯上,應(yīng)當(dāng)是主表Left Join輔表。大表之間的關(guān)聯(lián)存在最大的問題就是性能和穩(wěn)定性,對于海量數(shù)據(jù)來說,必須有優(yōu)化的方法來處理他們的關(guān)聯(lián),另外,對于大數(shù)據(jù)的處理無疑會占用太多的系統(tǒng)資源,出錯的幾率非常大,如何做到有效錯誤恢復(fù)也是個問題。對于這種情況,我們建議還是盡量將大表拆分成適度的稍小一點的表,形成大小交的類型。這類情況的輸出數(shù)據(jù)粒度和主表一樣。

      3、站著進(jìn)來,躺著出去。事務(wù)系統(tǒng)中為了提高系統(tǒng)靈活性和擴展性,很多信息放在代碼表中維護(hù),所以它的“事實表”就是一種窄表,而在數(shù)據(jù)倉庫中,通常要進(jìn)行寬化,從行變成列,所以稱這種處理情況叫做“站著進(jìn)來,躺著出去”。大家對Decode肯定不陌生,這是進(jìn)行寬表化常見的手段之一。窄表變寬表的過程主要體現(xiàn)在對窄表中那個代碼字段的操作。這種情況,窄表是輸入,寬表是輸出,寬表的粒度必定要比窄表粗一些,就粗在那個代碼字段上。

      4、聚集。數(shù)據(jù)倉庫中重要的任務(wù)就是沉淀數(shù)據(jù),聚集是必不可少的操作,它是粗化數(shù)據(jù)粒度的過程。聚集本身其實很簡單,就是類似SQL中Group by的操作,選取特定字段(維度),對度量字段再使用某種聚集函數(shù)。但是對于大數(shù)據(jù)量情況下,聚集算法的優(yōu)化仍是探究的一個課題。例如是直接使用SQL的Group by,還是先排序,在處理。

      二、微觀規(guī)則

      從數(shù)據(jù)的轉(zhuǎn)換的微觀細(xì)節(jié)分,可以分成下面的幾個基本類型,當(dāng)然還有一些復(fù)雜的組合情況,例如先運算,在參照轉(zhuǎn)換的規(guī)則,這種基于基本類型組合的情況就不在此列了。ETL的規(guī)則是依賴目標(biāo)數(shù)據(jù)的,目標(biāo)數(shù)據(jù)有多少字段,就有多少條規(guī)則。

      1、直接映射,原來是什么就是什么,原封不動照搬過來,對這樣的規(guī)則,如果數(shù)據(jù)源字段和目標(biāo)字段長度或精度不符,需要特別注意看是否真的可以直接映射還是需要做一些簡單運算。

      2、字段運算,數(shù)據(jù)源的一個或多個字段進(jìn)行數(shù)學(xué)運算得到的目標(biāo)字段,這種規(guī)則一般對數(shù)值型字段而言。

      3、參照轉(zhuǎn)換,在轉(zhuǎn)換中通常要用數(shù)據(jù)源的一個或多個字段作為Key,去一個關(guān)聯(lián)數(shù)組中去搜索特定值,而且應(yīng)該只能得到唯一值。這個關(guān)聯(lián)數(shù)組使用Hash算法實現(xiàn)是比較合適也是最常見的,在整個ETL開始之前,它就裝入內(nèi)存,對性能提高的幫助非常大。

      4、字符串處理,從數(shù)據(jù)源某個字符串字段中經(jīng)??梢垣@取特定信息,例如身份證號。而且,經(jīng)常會有數(shù)值型值以字符串形式體現(xiàn)。對字符串的操作通常有類型轉(zhuǎn)換、字符串截取等。但是由于字符類型字段的隨意性也造成了臟數(shù)據(jù)的隱患,所以在處理這種規(guī)則的時候,一定要加上異常處理。

      5、空值判斷,對于空值的處理是數(shù)據(jù)倉庫中一個常見問題,是將它作為臟數(shù)據(jù)還是作為特定一種維成員?這恐怕還要看應(yīng)用的情況,也是需要進(jìn)一步探求的。但是無論怎樣,對于可能有NULL值的字段,不要采用“直接映射”的規(guī)則類型,必須對空值進(jìn)行判斷,目前我們的建議是將它轉(zhuǎn)換成特定的值。

      6、日期轉(zhuǎn)換,在數(shù)據(jù)倉庫中日期值一般都會有特定的,不同于日期類型值的表示方法,例如使用8位整型20040801表示日期。而在數(shù)據(jù)源中,這種字段基本都是日期類型的,所以對于這樣的規(guī)則,需要一些共通函數(shù)來處理將日期轉(zhuǎn)換為8位日期值、6位月份值等。

      7、日期運算,基于日期,我們通常會計算日差、月差、時長等。一般數(shù)據(jù)庫提供的日期運算函數(shù)都是基于日期型的,而在數(shù)據(jù)倉庫中采用特定類型來表示日期的話,必須有一套自己的日期運算函數(shù)集。

      8、聚集運算,對于事實表中的度量字段,他們通常是通過數(shù)據(jù)源一個或多個字段運用聚集函數(shù)得來的,這些聚集函數(shù)為SQL標(biāo)準(zhǔn)中,包括sum,count,avg,min,max。

      9、既定取值,這種規(guī)則和以上各種類型規(guī)則的差別就在于它不依賴于數(shù)據(jù)源字段,對目標(biāo)字段取一個固定的或是依賴系統(tǒng)的值。

      探求ETL本質(zhì)之四(數(shù)據(jù)質(zhì)量)

      “不要絕對的數(shù)據(jù)準(zhǔn)確,但要知道為什么不準(zhǔn)確?!?/p>

      這是我們在構(gòu)建BI系統(tǒng)是對數(shù)據(jù)準(zhǔn)確性的要求。確實,對絕對的數(shù)據(jù)準(zhǔn)確誰也沒有把握,不僅是系統(tǒng)集成商,包括客戶也是無法確定。準(zhǔn)確的東西需要一個標(biāo)準(zhǔn),但首先要保證這個標(biāo)準(zhǔn)是準(zhǔn)確的,至少現(xiàn)在還沒有這樣一個標(biāo)準(zhǔn)。客戶會提出一個相對標(biāo)準(zhǔn),例如將你的OLAP數(shù)據(jù)結(jié)果和報表結(jié)果對比。雖然這是一種不太公平的比較,你也只好認(rèn)了吧。

      首先在數(shù)據(jù)源那里,已經(jīng)很難保證數(shù)據(jù)質(zhì)量了,這一點也是事實。在這一層有哪些可能原因?qū)е聰?shù)據(jù)質(zhì)量問題?可以分為下面幾類:

      1、數(shù)據(jù)格式錯誤,例如缺失數(shù)據(jù)、數(shù)據(jù)值超出范圍或是數(shù)據(jù)格式非法等。要知道對于同樣處理大數(shù)據(jù)量的數(shù)據(jù)源系統(tǒng),他們通常會舍棄一些數(shù)據(jù)庫自身的檢查機制,例如字段約束等。他們盡可能將數(shù)據(jù)檢查在入庫前保證,但是這一點是很難確保的。這類情況諸如身份證號碼、手機號、非日期類型的日期字段等。

      2、數(shù)據(jù)一致性,同樣,數(shù)據(jù)源系統(tǒng)為了性能的考慮,會在一定程度上舍棄外鍵約束,這通常會導(dǎo)致數(shù)據(jù)不一致。例如在帳務(wù)表中會出現(xiàn)一個用戶表中沒有的用戶ID,在例如有些代碼在代碼表中找不到等。

      3、業(yè)務(wù)邏輯的合理性,這一點很難說對與錯。通常,數(shù)據(jù)源系統(tǒng)的設(shè)計并不是非常嚴(yán)謹(jǐn),例如讓用戶開戶日期晚于用戶銷戶日期都是有可能發(fā)生的,一個用戶表中存在多個用戶ID也是有可能發(fā)生的。對這種情況,有什么辦法嗎?

      構(gòu)建一個BI系統(tǒng),要做到完全理解數(shù)據(jù)源系統(tǒng)根本就是不可能的。特別是數(shù)據(jù)源系統(tǒng)在交付后,有更多維護(hù)人員的即興發(fā)揮,那更是要花大量的時間去尋找原因。以前曾經(jīng)爭辯過設(shè)計人員對規(guī)則描述的問題,有人提出要在ETL開始之前務(wù)必將所有的規(guī)則弄得一清二楚。我并不同意這樣的意見,倒是認(rèn)為在ETL過程要有處理這些質(zhì)量有問題數(shù)據(jù)的保證。一定要正面這些臟數(shù)據(jù),是丟棄還是處理,無法逃避。如果沒有質(zhì)量保證,那么在這個過程中,錯誤會逐漸放大,拋開數(shù)據(jù)源質(zhì)量問題,我們再來看看ETL過程中哪些因素對數(shù)據(jù)準(zhǔn)確性產(chǎn)生重大影響。

      1、規(guī)則描述錯誤。上面提到對設(shè)計人員對數(shù)據(jù)源系統(tǒng)理解的不充分,導(dǎo)致規(guī)則理解錯誤,這是一方面。另一方面,是規(guī)則的描述,如果無二義性地描述規(guī)則也是要探求的一個課題。規(guī)則是依附于目標(biāo)字段的,在探求之三中,提到規(guī)則的分類。但是規(guī)則總不能總是用文字描述,必須有嚴(yán)格的數(shù)學(xué)表達(dá)方式。我甚至想過,如果設(shè)計人員能夠使用某種規(guī)則語言來描述,那么我們的ETL單元就可以自動生成、同步,省去很多手工操作了。

      2、ETL開發(fā)錯誤。即時規(guī)則很明確,ETL開發(fā)的過程中也會發(fā)生一些錯誤,例如邏輯錯誤、書寫錯誤等。例如對于一個分段值,開區(qū)間閉區(qū)間是需要指定的,但是常常開發(fā)人員沒注意,一個大于等于號寫成大于號就導(dǎo)致數(shù)據(jù)錯誤。

      3、人為處理錯誤。在整體ETL流程沒有完成之前,為了圖省事,通常會手工運行ETL過程,這其中一個重大的問題就是你不會按照正常流程去運行了,而是按照自己的理解去運行,發(fā)生的錯誤可能是誤刪了數(shù)據(jù)、重復(fù)裝載數(shù)據(jù)等。

      探求ETL本質(zhì)之五(質(zhì)量保證)

      上回提到ETL數(shù)據(jù)質(zhì)量問題,這是無法根治的,只能采取特定的手段去盡量避免,而且必須要定義出度量方法來衡量數(shù)據(jù)的質(zhì)量是好還是壞。對于數(shù)據(jù)源的質(zhì)量,客戶對此應(yīng)該更加關(guān)心,如果在這個源頭不能保證比較干凈的數(shù)據(jù),那么后面的分析功能的可信度也都成問題。數(shù)據(jù)源系統(tǒng)也在不斷進(jìn)化過程中,客戶的操作也在逐漸規(guī)范中,BI系統(tǒng)也同樣如此。本文探討一下對數(shù)據(jù)源質(zhì)量和ETL處理質(zhì)量的應(yīng)對方法。

      如何應(yīng)對數(shù)據(jù)源的質(zhì)量問題?記得在onteldatastage列表中也討論過一個話題-“-1的處理”,在數(shù)據(jù)倉庫模型維表中,通常有一條-1記錄,表示“未知”,這個未知含義可廣了,任何可能出錯的數(shù)據(jù),NULL數(shù)據(jù)甚至是規(guī)則沒有涵蓋到的數(shù)據(jù),都轉(zhuǎn)成-1。這是一種處理臟數(shù)據(jù)的方法,但這也是一種掩蓋事實的方法。就好像寫一個函數(shù)FileOpen(filename),返回一個錯誤碼,當(dāng)然,你可以只返回一種錯誤碼,如-1,但這是一種不好的設(shè)計,對于調(diào)用者來說,他需要依據(jù)這個錯誤碼進(jìn)行某些判斷,例如是文件不存在,還是讀取權(quán)限不夠,都有相應(yīng)的處理邏輯。數(shù)據(jù)倉庫中也是一樣,所以,建議將不同的數(shù)據(jù)質(zhì)量類型處理結(jié)果分別轉(zhuǎn)換成不同的值,譬如,在轉(zhuǎn)換后,-1表示參照不上,-2表示NULL數(shù)據(jù)等。不過這僅僅對付了上回提到的第一類錯誤,數(shù)據(jù)格式錯誤。對于數(shù)據(jù)一致性和業(yè)務(wù)邏輯合理性問題,這仍有待探求。但這里有一個原則就是“必須在數(shù)據(jù)倉庫中反應(yīng)數(shù)據(jù)源的質(zhì)量”。

      對于ETL過程中產(chǎn)生的質(zhì)量問題,必須有保障手段。從以往的經(jīng)驗看,沒有保障手段給實施人員帶來麻煩重重。實施人員對于反復(fù)裝載數(shù)據(jù)一定不會陌生,甚至是最后數(shù)據(jù)留到最后的Cube,才發(fā)現(xiàn)了第一步ETL其實已經(jīng)錯了。這個保障手段就是數(shù)據(jù)驗證機制,當(dāng)然,它的目的是能夠在ETL過程中監(jiān)控數(shù)據(jù)質(zhì)量,產(chǎn)生報警。這個模塊要將實施人員當(dāng)作是最終用戶,可以說他們是數(shù)據(jù)驗證機制的直接收益者。

      首先,必須有一個對質(zhì)量的度量方法,什么是高質(zhì)什么是低質(zhì),不能靠感官感覺,但這卻是在沒有度量方法條件下通常的做法。那經(jīng)營分析系統(tǒng)來說,聯(lián)通總部曾提出測試規(guī)范,這其實就是一種度量方法,例如指標(biāo)的誤差范圍不能高于5%等,對系統(tǒng)本身來說其實必須要有這樣的度量方法,先不要說這個度量方法是否科學(xué)。對于ETL數(shù)據(jù)處理質(zhì)量,他的度量方法應(yīng)該比聯(lián)通總部測試規(guī)范定義的方法更要嚴(yán)格,因為他更多將BI系統(tǒng)看作一個黑盒子,從數(shù)據(jù)源到展現(xiàn)的數(shù)據(jù)誤差允許一定的誤差。而ETL數(shù)據(jù)處理質(zhì)量度量是一種白盒的度量,要注重每一步過程。因此理論上,要求輸入輸出的指標(biāo)應(yīng)該完全一致。但是我們必須正面完全一致只是理想,對于有誤差的數(shù)據(jù),必須找到原因。

      在質(zhì)量度量方法的前提下,就可以建立一個數(shù)據(jù)驗證框架。此框架依據(jù)總量、分量數(shù)據(jù)稽核方法,該方法在高的《數(shù)據(jù)倉庫中的數(shù)據(jù)稽核技術(shù)》一文中已經(jīng)指出。作為補充,下面提出幾點功能上的建議:

      1、提供前端。將開發(fā)實施人員當(dāng)作用戶,同樣也要為之提供友好的用戶界面?!痘思夹g(shù)》一文中指出測試報告的形式,這種形式還是要依賴人為判斷,在一堆數(shù)據(jù)中去找規(guī)律。到不如用OLAP的方式提供界面,不光是加上測試統(tǒng)計出來的指標(biāo)結(jié)果,并且配合度量方法的計算。例如誤差率,對于誤差率為大于0的指標(biāo),就要好好查一下原因了。

      2、提供框架。數(shù)據(jù)驗證不是一次性工作,而是每次ETL過程中都必須做的。因此,必須有一個框架,自動化驗證過程,并提供擴展手段,讓實施人員能夠增加驗證范圍。有了這樣一個框架,其實它起到規(guī)范化操作的作用,開發(fā)實施人員可以將主要精力放在驗證腳本的編寫上,而不必過多關(guān)注驗證如何融合到流程中,如何展現(xiàn)等工作。為此,要設(shè)計一套表,類似于DM表,每次驗證結(jié)果數(shù)據(jù)都記錄其中,并且自動觸發(fā)多維分析的數(shù)據(jù)裝載、發(fā)布等。這樣,實施人員可以在每次裝載,甚至在流程過程中就可以觀察數(shù)據(jù)的誤差率。特別是,如果數(shù)據(jù)倉庫的模型能夠統(tǒng)一起來,甚至數(shù)據(jù)驗證腳本都可以確定下來,剩下的就是規(guī)范流程了。

      3、規(guī)范流程。上回提到有一種ETL數(shù)據(jù)質(zhì)量問題是由于人工處理導(dǎo)致的,其中最主要原因還是流程不規(guī)范。開發(fā)實施人員運行單獨一個ETL單元是很方便的,雖然以前曾建議一個ETL單元必須是“可重入”的,這能夠解決誤刪數(shù)據(jù),重復(fù)裝載數(shù)據(jù)問題。但要記住數(shù)據(jù)驗證也是在流程當(dāng)中,要讓數(shù)據(jù)驗證能夠日常運作,就不要讓實施者感覺到他的存在。總的來說,規(guī)范流程是提高實施效率的關(guān)鍵工作,這也是以后要繼續(xù)探求的。

      探求ETL本質(zhì)之六(元數(shù)據(jù)漫談)

      對于元數(shù)據(jù)(Metadata)的定義到目前為止沒有什么特別精彩的,這個概念非常廣,一般都是這樣定義,“元數(shù)據(jù)是描述數(shù)據(jù)的數(shù)據(jù)(Data about Data)”,這造成一種遞歸定義,就像問小強住在哪里,答,在旺財隔壁。按照這樣的定義,元數(shù)據(jù)所描述的數(shù)據(jù)是什么呢?還是元數(shù)據(jù)。這樣就可能有元元元...元數(shù)據(jù)。我還聽說過一種對元數(shù)據(jù),如果說數(shù)據(jù)是一抽屜檔案,那么元數(shù)據(jù)就是分類標(biāo)簽。那它和索引有什么區(qū)別?

      元數(shù)據(jù)體現(xiàn)是一種抽象,哲學(xué)家從古至今都在抽象這個世界,力圖找到世界的本質(zhì)。抽象不是一層關(guān)系,它是一種逐步由具體到一般的過程。例如我->男人->人->哺乳動物->生物這就是一個抽象過程,你要是在軟件業(yè)混會發(fā)現(xiàn)這個例子很常見,面向?qū)ο蠓椒ň褪沁@樣一種抽象過程。它對世界中的事物、過程進(jìn)行抽象,使用面向?qū)ο蠓椒?,?gòu)建一套對象模型。同樣在面向?qū)ο蠓椒ㄖ?,類是對象的抽象,接口又是對類的抽象。因此,我認(rèn)為可以將“元”和“抽象”換一下,叫抽象數(shù)據(jù)是不是好理解一些。常聽到這樣的話,“xx領(lǐng)導(dǎo)的講話高屋建瓴,給我們后面的工作指引的清晰的方向”,這個成語“高屋建瓴”,站在10樓往下到水,居高臨下,能砸死人,這是指站在一定的高度看待事物,這個一定的高度就是指他有夠“元”。在設(shè)計模式中,強調(diào)要對接口編程,就是說你不要處理這類對象和那類對象的交互,而要處理這個接口和那個接口的交互,先別管他們內(nèi)部是怎么干的。

      元數(shù)據(jù)存在的意義也在于此,雖然上面說了一通都撤到哲學(xué)上去,但這個詞必須還是要結(jié)合軟件設(shè)計中看,我不知道在別的領(lǐng)域是不是存在Metadata這樣的叫法,雖然我相信別的領(lǐng)域必然有類似的東東。元數(shù)據(jù)的存在就是要做到在更高抽象一層設(shè)計軟件。這肯定有好處,什么靈活性啊,擴展性啊,可維護(hù)性啊,都能得到提高,而且架構(gòu)清晰,只是彎彎太多,要是從下往上看,太復(fù)雜了。很早以前,我曾看過backorifice的代碼,我靠,一個簡單的功能,從這個類轉(zhuǎn)到父類,又轉(zhuǎn)到父類,很不理解,為什么一個簡單的功能不在一個類的方法中實現(xiàn)就拉到了呢?現(xiàn)在想想,還真不能這樣,這雖然使代碼容易看懂了,但是結(jié)構(gòu)確實混亂的,那他只能干現(xiàn)在的事,如果有什么功能擴展,這些代碼就廢了。

      我從98年剛工作時就開始接觸元數(shù)據(jù)的概念,當(dāng)時叫做元數(shù)據(jù)驅(qū)動的系統(tǒng)架構(gòu),后來在QiDSS中也用到這個概念構(gòu)建QiNavigator,但是現(xiàn)在覺得元數(shù)據(jù)也沒啥,不就是建一堆表描述界面的元素,再利用這些數(shù)據(jù)自動生成界面嗎。到了數(shù)據(jù)倉庫系統(tǒng)中,這個概念更強了,是數(shù)據(jù)倉庫中一個重要的部分。但是至今,我還是認(rèn)為這個概念過于玄乎,看不到實際的東西,市面上有一些元數(shù)據(jù)管理的東西,但是從應(yīng)用情況就得知,用的不多。之所以玄乎,就是因為抽象層次沒有分清楚,關(guān)鍵就是對于元數(shù)據(jù)的分類(這種分類就是一種抽象過程)和元數(shù)據(jù)的使用。你可以將元數(shù)據(jù)抽象成0和1,但是那樣對你的業(yè)務(wù)有用嗎?必須還得抽象到適合的程度,最后問題還是“度”。

      數(shù)據(jù)倉庫系統(tǒng)的元數(shù)據(jù)作用如何?還不就是使系統(tǒng)自動運轉(zhuǎn),易于管理嗎?要做到這一步,可沒必要將系統(tǒng)抽象到太極、兩儀、八卦之類的,業(yè)界也曾定義過一些元數(shù)據(jù)規(guī)范,向CWM、XMI等等,可以借鑒,不過俺對此也是不精通的說,以后再說

      第五篇: ETL技術(shù)和數(shù)據(jù)倉庫建設(shè)的研究

      畢業(yè)論文(設(shè)計)開題報告

      論文題目: ETL技術(shù)和數(shù)據(jù)倉庫建設(shè)的研究

      一、開題依據(jù)(研究目的、意義及國內(nèi)外研究概況,附主要參考文獻(xiàn))

      文獻(xiàn)描述中人們對大數(shù)據(jù)時代下的定義中比較通俗一點是指“描述和定義信息爆炸時代產(chǎn)生的海量大數(shù)據(jù)時代”,何為大數(shù)據(jù)?大數(shù)據(jù)是從各種各樣不同類型的數(shù)據(jù)中,快速獲得有價值信息的一種前沿技術(shù)。大數(shù)據(jù)是指通過對海量的,種類和來源復(fù)雜的數(shù)據(jù)進(jìn)行有效地捕捉,發(fā)現(xiàn)和挖掘分析,用經(jīng)濟的方法提取其數(shù)據(jù)價值的技術(shù)體系或者技術(shù)架構(gòu)。所以,從廣義上講,大數(shù)據(jù)不僅僅是指大數(shù)據(jù)所涉及的數(shù)據(jù),還包含對這些數(shù)據(jù)如何進(jìn)行處理,存儲和分析的理論,方法以及技術(shù)。

      大數(shù)據(jù)在2000 年代初的數(shù)據(jù)熱潮期間出現(xiàn),軟件和硬件功能是消費者產(chǎn)生大量信息,包括大量結(jié)構(gòu)化和非結(jié)構(gòu)化信息。在pc和移動智能終端迅速普及的當(dāng)下社會,包括搜索引擎,移動設(shè)備和工業(yè)機械等新技術(shù)可提供持續(xù)增長并可處理的數(shù)據(jù),每天都有數(shù)以億計的海量數(shù)據(jù)產(chǎn)生,隨著可收集數(shù)據(jù)量的幾何倍增長,顯而易見,傳統(tǒng)數(shù)據(jù)技術(shù)(關(guān)系數(shù)據(jù)庫)不適合與大量天文數(shù)據(jù)量的結(jié)構(gòu)和非機構(gòu)化數(shù)據(jù)一起使用。Apache軟件基金會啟動了第一個大數(shù)據(jù)創(chuàng)新項目,最重要的貢獻(xiàn)來自于 谷歌,雅虎,ibm等。最常用的引擎是:ApacheHive / Hadoop 是復(fù)雜數(shù)據(jù)準(zhǔn)備和ETL的標(biāo)桿產(chǎn)品,使得海量的數(shù)據(jù)的存儲和基于數(shù)據(jù)的分析變得更加便捷。

      參考文獻(xiàn):

      Ralph Kimball.數(shù)據(jù)倉庫工具箱(第三版)

      王雪迎.Kettle 構(gòu)建Hadoop ETL系統(tǒng)實踐

      占小憶.科技創(chuàng)新導(dǎo)報

      二、主要研究內(nèi)容(說明研究課題的具體內(nèi)容及課題的新穎性,并明確重點解決的科學(xué)問題及預(yù)期結(jié)果)

      隨著行業(yè)數(shù)據(jù)量的爆炸性增長,由于數(shù)據(jù)量的大,復(fù)雜,快速變化的性質(zhì),傳統(tǒng)的oltp系統(tǒng),事務(wù)型數(shù)據(jù)庫,如 mysql,oracle,sqlserver等已經(jīng)不適用于對海量多元化數(shù)據(jù)進(jìn)行統(tǒng)計分析挖掘,本文主要討論和總結(jié)處理大數(shù)據(jù)的方法和現(xiàn)狀,我們的目標(biāo)就是探討研究數(shù)據(jù)量大的情況如何有效處理數(shù)據(jù)(ETL)以及構(gòu)建存儲基礎(chǔ)數(shù)據(jù)模型(數(shù)據(jù)倉庫)便于數(shù)據(jù)能被更高效的使用挖掘分析。

      “數(shù)據(jù)倉庫”一詞最早是在1990年,由Bill Inmon先生提出的,其描述如下:“數(shù)據(jù)倉庫是為支持企業(yè)決策而特別設(shè)計和建立的數(shù)據(jù)集合”。準(zhǔn)確來說,數(shù)據(jù)倉庫是一個環(huán)境,而不是一件產(chǎn)品,提供用戶用于決策支持的當(dāng)前和歷史數(shù)據(jù),這些數(shù)據(jù)在傳統(tǒng)的操作型數(shù)據(jù)庫中很難或者不能得到。數(shù)據(jù)倉庫技術(shù)是為了有效的把操作形數(shù)據(jù)集成到統(tǒng)一的環(huán)境中以提供決策數(shù)據(jù)訪問的各種技術(shù)和模型的總稱。

      打破數(shù)據(jù)孤島的情況,對來源復(fù)雜的各個不同的業(yè)務(wù)系統(tǒng)的不同數(shù)據(jù)進(jìn)行整合,建立一個大集合的數(shù)據(jù)倉庫,構(gòu)造正真意義傻姑娘的“客戶同意試圖”,讓數(shù)據(jù)開發(fā)和數(shù)據(jù)分析人員能夠切實掌握全面信息。為決策提供完備的數(shù)據(jù)依據(jù)。

      “ETL”概念:

      (1)數(shù)據(jù)抽?。‥xtract),常規(guī)的數(shù)據(jù)抽取策略有:1)同步實現(xiàn)抽??;2)異步實現(xiàn)抽取

      (2)數(shù)據(jù)清洗和轉(zhuǎn)換(Transformation),數(shù)據(jù)轉(zhuǎn)換工作進(jìn)行的時機有:1)在抽取過程中進(jìn)行數(shù)據(jù)處理;2)使用異步加載,以文件的方式處理;3)在數(shù)據(jù)加載過程中進(jìn)行數(shù)據(jù)處理;4)進(jìn)入數(shù)據(jù)倉庫以后再進(jìn)行處理

      (3)數(shù)據(jù)裝載(Load),數(shù)據(jù)的追加策略類型有:1)直接追加;2)全部覆蓋;3)更新追加

      預(yù)期結(jié)果:(1)選型部署一個ETL工具,完成數(shù)據(jù)的抽取,轉(zhuǎn)換和裝載,保證數(shù)據(jù)穩(wěn)定持續(xù),源源不斷得從源系統(tǒng)進(jìn)入數(shù)據(jù)倉庫

      (2)數(shù)據(jù)倉庫的設(shè)計和模型建設(shè),便于數(shù)據(jù)存儲已經(jīng)數(shù)據(jù)開發(fā)及分析人員便捷查詢的分層模型構(gòu)建

      三、研究方案(研究方法、研究工作的總體安排和進(jìn)度,理論分析、計算、實驗方法和步驟及其可行性,可能遇到的問題及解決辦法)

      2021/1/14-2022/2/2 明確論文內(nèi)容,進(jìn)行相關(guān)論文資料的查找與翻譯。

      2022/2/2-2022/2/14 撰寫開題報告

      2022/2/14-2022/3/1 ETL常用應(yīng)用研究

      2022/3/1-2022/3/15 數(shù)據(jù)倉庫構(gòu)建研究

      2022/3/15-2022/4/1 撰寫論文

      2022/4/1-2022/4/08 論文修改定稿

      四、指導(dǎo)老師意見

      指導(dǎo)教師簽名:

      年 月 日

      下載ETL學(xué)習(xí)心得word格式文檔
      下載ETL學(xué)習(xí)心得.doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        DataStage(ETL)技術(shù)總結(jié)介紹篇

        DataStage(ETL)技術(shù)總結(jié) -- 介紹篇(轉(zhuǎn)載)數(shù)據(jù)整合的核心內(nèi)容是從數(shù)據(jù)源中抽取數(shù)據(jù),然后對這些數(shù)據(jù)進(jìn)行轉(zhuǎn)化,最終加載的目標(biāo)數(shù)據(jù)庫或者數(shù)據(jù)倉庫中去,這也就是我們通常所說的 ETL......

        教學(xué)管理數(shù)據(jù)倉庫中ETL的實現(xiàn)

        龍源期刊網(wǎng) http://004km.cn 教學(xué)管理數(shù)據(jù)倉庫中ETL的實現(xiàn) 作者:占小憶 來源:《科技創(chuàng)新導(dǎo)報》2011年第16期 摘 要:ETL 工具從異構(gòu)數(shù)據(jù)源抽取數(shù)據(jù),并將數(shù)據(jù)清洗,規(guī)......

        申請ETL認(rèn)證需要準(zhǔn)備資料總結(jié)

        申請ETL認(rèn)證需要準(zhǔn)備資料總結(jié) ETL+CETL認(rèn)證標(biāo)識,右下方的"us"表示適用于美國,左下方的"c"表示適用于加拿大,同時具有"us"和"c"則在兩個國家都適用。 ETL認(rèn)證目前也是北美最被......

        學(xué)習(xí)心得

        培訓(xùn)心得體會 經(jīng)過為期三周,總計六天的聽特爾未來教育培訓(xùn)學(xué)習(xí),我們學(xué)到了很多平時沒被關(guān)注的東西,此次培訓(xùn)為我以后的教學(xué)工作提出了很多值得借鑒的指導(dǎo)意見。 本次教育培訓(xùn)主......

        學(xué)習(xí)心得

        亞偉速錄培訓(xùn)人才就業(yè)經(jīng)驗交流會學(xué)習(xí)心得 2010年12月18日,我參加了由北京市速記協(xié)會、人才中心策劃主辦的亞偉速錄培訓(xùn)人才就業(yè)經(jīng)驗交流會。本次會議有52所大、中專院校及培......

        學(xué)習(xí)心得

        學(xué)習(xí)心得 晚自習(xí)讓我學(xué)到了要歸納總結(jié),將知識點串成線,連成網(wǎng),建立知識體系。還要從系統(tǒng)的角度學(xué)習(xí),正像素描一樣,首先要將大框架勾勒出來,然后再詳細(xì)的描繪一個個細(xì) 節(jié),最后完成作......

        學(xué)習(xí)心得 -

        全國“小學(xué)特級教師創(chuàng)新力課堂觀摩活動”學(xué)習(xí)心得 今天有幸參加棗莊舉辦的“小學(xué)特級教師創(chuàng)新力課堂觀摩活動”,聽了蔡宏圣老師的《百分?jǐn)?shù)的認(rèn)識》,我覺得課前交流這個部分是......

        學(xué)習(xí)心得

        學(xué)習(xí)干部選拔任用監(jiān)督工作政策法規(guī)專題活動心得 作者:云中一野鶴 當(dāng)前,按照省委組織部部署,在各級領(lǐng)導(dǎo)干部中集中開展一次關(guān)于干部選拔任用監(jiān)督工作政策法規(guī)專題教育活動。我單......