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