商業(yè)智能平臺研究(八) ETL 之metadata
商業(yè)智能平臺研究(八) ETL 之metadatametadata
網(wǎng)上有很多寫metadata的文章,如果覺得我沒有寫清楚,也可以參考一下其他人的文章,
元數(shù)據(jù)的定義就是:描述數(shù)據(jù)的數(shù)據(jù),你非要問什么描述元數(shù)據(jù),還是元數(shù)據(jù)本身,UML中也有這種概念,只不過是描述的對象不一樣罷了。
讓我們解釋的更加通俗易懂一些吧,在javaSE中也有metadata的概念,最早的就算是JavaDoc了,在5.0之后,Annotation就是 大量的使用metadata了,這是關于源代碼的數(shù)據(jù),具體來說就是關于Java的類、方法、字段等關聯(lián)的附加數(shù)據(jù)。這些數(shù)據(jù)可以被Java的編譯器或者 其它工具(比如Java IDE 象eclipse+junit一樣)來發(fā)現(xiàn)和使用。
junit在4.0后也使用了Annotation也算是metadata的一種應用。
可見metadata并不是什么高不可攀的技術,我們時刻都在使用。
再來看看metadata在BI系統(tǒng)上的定義吧 , 如果你覺得下面這段話很無聊,請直接跳過下面這段 。
元數(shù)據(jù)(Metadata)是關于數(shù)據(jù)、操縱數(shù)據(jù)的進程,以及應用程序的結(jié)構(gòu)、意義的描述信息,其主要目標是提供數(shù)據(jù)資源的全面指南。元數(shù)據(jù)是描述數(shù)據(jù)倉 庫內(nèi)數(shù)據(jù)結(jié)構(gòu)和建立方法的數(shù)據(jù),可將其按用途分為兩類:技術元數(shù)據(jù)(Technical Metadata)、業(yè)務元數(shù)據(jù)(Business Metadata)和內(nèi)聯(lián)映射元數(shù)據(jù)(Inter-Mapping Metadata)。
技術元數(shù)據(jù)是存儲關于數(shù)據(jù)倉庫系統(tǒng)技術細節(jié)的數(shù)據(jù),是用于開發(fā)和管理數(shù)據(jù)倉庫的數(shù)據(jù),主要包括數(shù)據(jù)倉庫結(jié)構(gòu)的描述(各個主題的定義,星型模式或雪花型模式 的描述定義等)、ODS層(操作數(shù)據(jù)存儲ODS .Operation Data Storage)的企業(yè)數(shù)據(jù)模型描述(以描述關系表及其關聯(lián)關系為形式)、對數(shù)據(jù)稽核規(guī)則的定義、數(shù)據(jù)集市定義描述與裝載描述(包括Cube的維度、層 次、度量以及相應事實表、概要表的抽取規(guī)則)。另外,安全認證數(shù)據(jù)也作為元數(shù)據(jù)的一個重要部分進行管理。
業(yè)務元數(shù)據(jù)從業(yè)務角度描述了數(shù)據(jù)倉庫中的數(shù)據(jù),它提供了介于使用者和實際系統(tǒng)之間的語義層,使得不懂計算機技術的業(yè)務人員也能夠理解數(shù)據(jù)倉庫中的數(shù)據(jù)。業(yè) 務元數(shù)據(jù)包括以下信息:使用者的業(yè)務術語所表達的數(shù)據(jù)模型、對象名和屬性名;訪問數(shù)據(jù)的原則和數(shù)據(jù)來源;系統(tǒng)所提供的分析方法及公式、報表信息。
內(nèi)聯(lián)映射元數(shù)據(jù)(Inter-Mapping Metadata)實現(xiàn)技術元數(shù)據(jù)與業(yè)務元數(shù)據(jù)的層間映射,使得信息系統(tǒng)的概念模型與物理模型相互獨立,使企業(yè)的概念、業(yè)務模型重組,以及物理模型的變化相互透明。
內(nèi)聯(lián)映射元數(shù)據(jù)從技術上為業(yè)務需求驅(qū)動、企業(yè)數(shù)據(jù)驅(qū)動的雙驅(qū)動建設模型提供了重要保證,使信息系統(tǒng)的建設具有更高的靈活性與適應性
元數(shù)據(jù)是跟特定的數(shù)據(jù)對象有關的,換句話說,talend和kettle的元數(shù)據(jù)就是不一樣的。ETL的元數(shù)據(jù)就和pentaho report 的元數(shù)據(jù)不一樣,因為他們要描述的東西不一樣。這些元數(shù)據(jù)的存儲格式可以有多種,可以儲存成XML格式的也可以是放在數(shù)據(jù)庫里面的。事實上這兩種最通用 的,也是可以互補的兩種,沒有誰比誰重要之說。
metadata儲存在repository的地方,我不知道是不是所有的ETL工具都喜歡這么叫.每個repository都會選用數(shù)據(jù)庫來儲存,他們 都是按照一定的格式,這些格式最后也是可以變成XML形式的.這是看每個工具的支持程度,kettle 就支持導出到XML格式,其他的工具我就不知道了.
具體解釋到kettle來說,metadata就是你定義的每一個動作.kettle的repository里面有如下一些表,我沒有列出全部,從表的結(jié)構(gòu)看一下kettle的metadata有哪些
1. R_DATABASE R_DATABASE_ATIRIBUTE R_DATABASE_CONTYPE R_DATABASE_TYPE
2. R_JOB R_JOB_HOP R_JOBENTRY R_JOBENTRY_ATIRIBUTE R_JOBENTRY_TYPE
3. R_LOG R_LOGLEVEL
4. R_STEP R_STEP_DATABASE
5. R_TRANS_ATIRIBUTE R_TRANS_HOP R_TRANS_CONDITION
6. R_USER R_VALUE R_PERMISSION
7. R_CLUSTER R_CLUSTER_SLAVE R_SLAVE
8. R_PARTITION R_PARTITION_SCHEMA
1 . database的鏈接信息.在R_DATABASE_TYPE 表里面包含了所有支持的數(shù)據(jù)庫鏈接信息,一共是25種,算是支持非常的多了.
2. 任務設計部分的表,R_JOB_HOP 是指兩個數(shù)據(jù)之間的鏈接部分, R_JOBENTRY_TYPE 是目前支持的操作種類,一共有27種,包括Transformation , Job , Shell , Mail , SQL ,FTP ,Table exists ,File Exists , JavaScript , Secure FTP , HTTP , Create File , Delete File , Wait for File , Put a file with SFTP , File Compare , BulkLoad into Mysql , Display Msgbox Info , Wait for , Zip file , XSL Transformatio, BulkLoad from Mysql into File , Abort Job , Get mails from POP , Ping a host , Dummy Job Entry .
其中BulkLoad 只跟Mysql有關,我感覺很奇怪,BulkLoad 是數(shù)據(jù)庫批量處理的方式,大型數(shù)據(jù)庫都是支持的,比如oracle就有sqlloader來支持批量處理,其他的大型數(shù)據(jù)庫應該也有吧,而且在 transform里面kettle也有oracle的支持,在任務設計的時候就只有mysql的支持,不知道什么原因.
最后一個Dummy Job Entry 就是什么都不做.
3. Log記錄,loglevel 一共有6種,Nothing at all , Minimal loggin , Basic loggin , Detailed loggin , Debugging , RowLevel(very detailed).根據(jù)你自己的需要來選擇log的級別.
4. 每一步操作的表格與你使用的數(shù)據(jù)庫
5. 轉(zhuǎn)換的定義.一共有70種不同的轉(zhuǎn)化,你不會想看到全部列出來的,其中有幾種很有用的,比如DimensionLookup , 它的解釋就是"在一個數(shù)據(jù)倉庫里更新一個漸變維,或者在這個維里查詢信息.
還有基于關鍵字刪除記錄,
cuebOutput, 把數(shù)據(jù)寫入一個cube,
從一個excel文件讀數(shù)據(jù),執(zhí)行一個sql腳本,調(diào)用數(shù)據(jù)庫的儲存過程,
OraBulkLoader ,調(diào)用oracle 的bulk loader to load data ,(應該是指Oracle的SQLLOADER吧).
ProSAPCONN, 從一個SAP系統(tǒng)取數(shù)據(jù).
MergeRows,合并兩個數(shù)據(jù)流, 并根據(jù)某個關鍵字排序. 這兩個數(shù)據(jù)流被比較,以標識相等的、變更的、刪除的和新建的記錄.
插一句關于merge的概念,從網(wǎng)上copy下來的:
MERGE語句是Oracle9i新增的語法,用來合并UPDATE和INSERT語句。通過MERGE語句,根據(jù)一張表或子查詢的連接條件對另外一張表 進行查詢,連接條件匹配上的進行UPDATE,無法匹配的執(zhí)行INSERT。這個語法僅需要一次全表掃描就完成了全部工作,執(zhí)行效率要高于INSERT+ UPDATE。
6. 用戶與權限.一開始建立的用戶有兩種,admin和guest ,權限有5種,Read only access , Administrator , Use transformations , Use Jobs , Use schemas .
7. pentaho官方網(wǎng)站上面有一個新聞是關于在mysql的
Kettle集群新記錄:
最近Kettle集群基于 Amazon Elastic Computing Cloud做了一次測試,單臺服務器輸出4000 rows/sec ,數(shù)據(jù)庫為MySQL. 如果你發(fā)送數(shù)據(jù)通過sockets從一個master到5個slave servers, 你將獲得 5x4000 row inserts/sec。集群的效果非常好.
我個人也做過測試。數(shù)據(jù)庫是oracle 10.2.0.1,內(nèi)網(wǎng)連接,從一臺機器的oracle到本地機器,沒有集群,速度也大概是4000 多一點 ,數(shù)據(jù)量大概是16萬。
8 . 數(shù)據(jù)庫分區(qū)是數(shù)據(jù)庫的高級特性之一,oracle的XE版和Enterprise版本的有一個差別就是XE版不支持分區(qū)。
kettle還支持metadata搜索,可搜索的選項包括步驟,數(shù)據(jù)庫連接和注釋 ,可見metadata對于ETL的重要性就是它能夠更好的管理你的數(shù)據(jù),而不只是讓你的數(shù)據(jù)呆在數(shù)據(jù)庫里面。kettle對與數(shù)據(jù)庫的元數(shù)據(jù)管理并不是 很好,所謂數(shù)據(jù)庫的元數(shù)據(jù)就比如數(shù)據(jù)庫中表的名字,每一個column的信息,column的長度,每一個表的constrain,index等,而只有 提供這些信息的管理才能夠?qū)TL過程做的更好。下一篇介紹ETL質(zhì)量控制的時候會看到oracle warehouse builder 對于這些數(shù)據(jù)管理是多么的強大,目前kettle的能力還不能算是非常的強大的。
pentaho平臺本身還有一種metadata , 在官方主頁上是這么寫的:
pentaho metadata的能力是讓管理員定義一個抽象層來顯示數(shù)據(jù)庫信息和商業(yè)流程,管理員用關系型數(shù)據(jù)庫的表來表現(xiàn)相互之間的關系,為了復雜和含義模糊的數(shù)據(jù) 庫表和列而創(chuàng)建商用術語,為特性用戶而設定權限參數(shù),指定默認的數(shù)據(jù)格式,為多種語言部署提供翻譯,商業(yè)用戶可以使用pentaho新的ad hoc query能力查詢他們想要的報表,比如訂單的數(shù)量和按地區(qū)排序的客戶開銷,SQL可以自動取得這些信息。
數(shù)據(jù)倉庫的建模也需要用到metadata, oracle的數(shù)據(jù)倉庫建模就是用的一種叫 Common Warehouse Metamodel 的metadata , CWM提供一個數(shù)據(jù)倉庫的標準讓不同的廠商集成和管理他們的數(shù)據(jù),CWM建立在開發(fā)的標準XMI(XML for Metadata interchange) XML 和 UML2 作為建模語言。CWM 用UML2 定義一組核心類,這些類分作package(或者叫做子模型submodels),每一個提供一個特定的數(shù)據(jù)倉庫的domain , 比如 Relational , OLAP ,Transformation , CWM 提供一個強大的數(shù)據(jù)模型來實現(xiàn)數(shù)據(jù)倉庫的Extraction , transformation , loading , integration and analysis ,沒有一個單獨的模型能夠滿足各種應用程序和開發(fā)工具的需求,但是CWM 為這些工具提供特定的擴展,它被設計用來支持關于metadata的快速開發(fā),使用戶能夠通過擴展來滿足他們的需求。(上面這段話翻譯自http: //www.corba.org/vendors/pages/oracleCWM.html , 翻譯的不是很好,如果各位有興趣可以自己去看看)
下一篇介紹ETL的數(shù)據(jù)質(zhì)量控制。