元數(shù)據(jù)
??? 元數(shù)據(jù)(Metadata):就是數(shù)據(jù)的數(shù)據(jù),用于建立、管理、維護和使用數(shù)據(jù)倉庫。元數(shù)據(jù)管理是企業(yè)級數(shù)據(jù)倉庫中的關(guān)鍵組件,貫穿于建立數(shù)據(jù)倉庫的整個過程。
?
元數(shù)據(jù)使得用戶可以掌握數(shù)據(jù)的歷史情況,如數(shù)據(jù)從哪里來?流通時間有多長?更新頻率是多大?數(shù)據(jù)元素的含義是什么?對它已經(jīng)進(jìn)行了哪些計算、轉(zhuǎn)換和篩選等等。在需求不確定情況下,在瞬間萬變的商業(yè)環(huán)境下,元數(shù)據(jù)可以更好的支持需求的變化,降低項目風(fēng)險。
元數(shù)據(jù)貫徹于建立數(shù)據(jù)倉庫的整個過程,不只是ETL過程需要元數(shù)據(jù)的支持。
?
????

?
?
元數(shù)據(jù)分類
通常把元數(shù)據(jù)分為技術(shù)元數(shù)據(jù)(Technical Metadata)和業(yè)務(wù)元數(shù)據(jù)(Business Metadata)。
?
???
技術(shù)元數(shù)據(jù)
是描述關(guān)于數(shù)據(jù)倉庫技術(shù)細(xì)節(jié)的數(shù)據(jù),這些元數(shù)據(jù)應(yīng)用于開發(fā)、管理和維護數(shù)據(jù)倉庫,它主要包含以下信息。
?
??? 1、數(shù)據(jù)倉庫結(jié)構(gòu)的描述,包括倉庫模式、視圖、維、層次結(jié)構(gòu)和導(dǎo)出數(shù)據(jù)的定義,以及數(shù)據(jù)集市的位置和內(nèi)容;
??? 2、業(yè)務(wù)系統(tǒng)、數(shù)據(jù)倉庫和數(shù)據(jù)集市的體系結(jié)構(gòu)和模式;
??? 3、匯總用的算法,包括度量和維定義算法,數(shù)據(jù)粒度、主題領(lǐng)域、聚合、匯總和預(yù)定義的查詢與報告;
??? 4、由操作環(huán)境到數(shù)據(jù)倉庫環(huán)境的映射,包括源數(shù)據(jù)和它們的內(nèi)容、數(shù)據(jù)分割、數(shù)據(jù)提取、清理、轉(zhuǎn)換規(guī)則和數(shù)據(jù)刷新規(guī)則及安全(用戶授權(quán)和存取控制)。
?
???
業(yè)務(wù)元數(shù)據(jù)
從業(yè)務(wù)角度描述了數(shù)據(jù)倉庫中的數(shù)據(jù),它提供了介于使用者和實際系統(tǒng)之間的語義層,使得不懂計算機技術(shù)的業(yè)務(wù)人員也能夠“讀懂”數(shù)據(jù)倉庫中的數(shù)據(jù)。業(yè)務(wù)元數(shù)據(jù)主要包括以下信息:使用者的業(yè)務(wù)術(shù)語所表達(dá)的數(shù)據(jù)模型、對象名和屬性名;訪問數(shù)據(jù)的原則和數(shù)據(jù)的來源;系統(tǒng)所提供的分析方法及公式和報表的信息。
?
??? 在信息打包過程中,需要用包圖表示維度和類別還有它們之間的傳遞和映射關(guān)系,實際上這個操作就是在原業(yè)務(wù)系統(tǒng)的基礎(chǔ)上創(chuàng)建了元數(shù)據(jù)。其中的維度、類別還有層次關(guān)系是屬于典型的技術(shù)型元數(shù)據(jù),而業(yè)務(wù)系統(tǒng)中與之對應(yīng)的術(shù)語則屬于業(yè)務(wù)元數(shù)據(jù)。比如日期、區(qū)域、產(chǎn)品、客戶年齡和客戶狀況等維度,實際銷售、計劃銷售、預(yù)測銷售、計劃偏差和預(yù)測偏差等指標(biāo)皆屬于元數(shù)據(jù)。這些數(shù)據(jù)在分析中起到了極為重要的作用。
?
?
元數(shù)據(jù)的作用
?
??? 從元數(shù)據(jù)的類型和作用來看,元數(shù)據(jù)實際上是要解決何人在何時、何地為了什么原因及怎樣使用數(shù)據(jù)倉庫的問題。再具體化一點,元數(shù)據(jù)在數(shù)據(jù)倉庫管理員的眼中是數(shù)據(jù)倉庫中的包含了所有內(nèi)容和過程的完整知識庫和文檔,而在最終用戶(即數(shù)據(jù)分析人員)眼中,元數(shù)據(jù)則是數(shù)據(jù)倉庫的信息地圖。
?
??? 數(shù)據(jù)分析員為了能有效地使用數(shù)據(jù)倉庫環(huán)境,往往需要元數(shù)據(jù)的幫助。尤其是在數(shù)據(jù)分析員進(jìn)行信息分析處理時,他們首先需要去查看元數(shù)據(jù)。元數(shù)據(jù)還涉及到數(shù)據(jù)從操作型環(huán)境到數(shù)據(jù)倉庫環(huán)境中的映射。當(dāng)數(shù)據(jù)從操作型環(huán)境進(jìn)入數(shù)據(jù)倉庫環(huán)境時,數(shù)據(jù)要經(jīng)歷一系列重大的轉(zhuǎn)變,包含了數(shù)據(jù)的轉(zhuǎn)化、過濾、匯總和結(jié)構(gòu)改變等過程。數(shù)據(jù)倉庫的元數(shù)據(jù)要能夠及時跟蹤這些轉(zhuǎn)變,當(dāng)數(shù)據(jù)分析員需要就數(shù)據(jù)的變化從數(shù)據(jù)倉庫環(huán)境追溯到操作型環(huán)境中時,就要利用元數(shù)據(jù)來追蹤這種轉(zhuǎn)變。另外,由于數(shù)據(jù)倉庫中的數(shù)據(jù)會存在很長一段時間,其間數(shù)據(jù)倉庫往往可能會改變數(shù)據(jù)的結(jié)構(gòu)。隨著時間的流逝來跟蹤數(shù)據(jù)結(jié)構(gòu)的變化,是元數(shù)據(jù)另一個常見的使用功能。
?
??? 元數(shù)據(jù)描述了數(shù)據(jù)的結(jié)構(gòu)、內(nèi)容、鏈和索引等項內(nèi)容。在傳統(tǒng)的數(shù)據(jù)庫中,元數(shù)據(jù)是對數(shù)據(jù)庫中各個對象的描述,數(shù)據(jù)庫中的數(shù)據(jù)字典就是一種元數(shù)據(jù)。在關(guān)系數(shù)據(jù)庫中,這種描述就是對數(shù)據(jù)庫、表、列、觀點和其他對象的定義;但在數(shù)據(jù)倉庫中,元數(shù)據(jù)定義了數(shù)據(jù)倉庫中的許多對象——表、列、查詢、商業(yè)規(guī)則及數(shù)據(jù)倉庫內(nèi)部的數(shù)據(jù)轉(zhuǎn)移。元數(shù)據(jù)是數(shù)據(jù)倉庫的重要構(gòu)件,是數(shù)據(jù)倉庫的指示圖。元數(shù)據(jù)在數(shù)據(jù)源抽取、數(shù)據(jù)倉庫開發(fā)、商務(wù)分析、數(shù)據(jù)倉庫服務(wù)和數(shù)據(jù)求精與重構(gòu)工程等過程都有重要的作用,元數(shù)據(jù)在整個數(shù)據(jù)倉庫開發(fā)和應(yīng)用過程中的巨大影響。因此,設(shè)計一個描述能力強并且內(nèi)容完善的元數(shù)據(jù),對數(shù)據(jù)倉庫進(jìn)行有效地開發(fā)和管理具有決定性意義。
?
?
?
?
?
?
?
?
?
--------------------------------------
?
??? 在數(shù)據(jù)倉庫中,元數(shù)據(jù)的概念被強化了,在每個數(shù)據(jù)倉庫項目的總體架構(gòu)圖中,幾乎都有”元數(shù)據(jù)治理”模塊來橫貫其他模塊。顯然,這表示它是一種基礎(chǔ)模塊,可以服務(wù)于諸如OLAP、ETL等其他模塊。但實際上,卻很少見一個完成了的數(shù)據(jù)倉庫項目中有獨立的元數(shù)據(jù)部分。大多項目,元數(shù)據(jù)都是分散在各種BI工具中。
??? 這些分散的元數(shù)據(jù)是不一致的,例如對一張表的結(jié)構(gòu)定義,可能出現(xiàn)在ER設(shè)計工具中,當(dāng)然也會在數(shù)據(jù)庫的數(shù)據(jù)字典中,還有可能在ETL工具的源、目標(biāo)定義中。如此多的重復(fù)定義,當(dāng)然會發(fā)生數(shù)據(jù)不一致現(xiàn)象,卻也正好為元數(shù)據(jù)治理工具留下廣闊空間,它們的作用就是集中治理這些分散的元數(shù)據(jù),就像數(shù)據(jù)倉庫一樣,從不同的源采集數(shù)據(jù),有ETL,也有清洗,甚至重新建模。
??? 元數(shù)據(jù)(metadata)這個詞現(xiàn)在到處泛濫。其實我對元數(shù)據(jù)充其量只能說有自己的理解而已,并不能確信這個理解是正確的。
?
??? 我認(rèn)為,數(shù)據(jù)結(jié)構(gòu)分為三個層次(UML可是四層哦):
??? 實例層:直接描述特異化的數(shù)據(jù)場景;
??? 元數(shù)據(jù)層:描述實例的結(jié)構(gòu)的一組數(shù)據(jù);
??? 元數(shù)據(jù)的元數(shù)據(jù)層:描述元數(shù)據(jù)的結(jié)構(gòu)的一組數(shù)據(jù)。
??? 元數(shù)據(jù)就是用來描述實例或者描述元數(shù)據(jù)的一種結(jié)構(gòu)。
??? 元數(shù)據(jù)的特征有這樣幾個:第一是元數(shù)據(jù)一定不依賴業(yè)務(wù)反而被業(yè)務(wù)所依賴,相當(dāng)業(yè)務(wù)的多變性,元數(shù)據(jù)是相對穩(wěn)定的;第二是元數(shù)據(jù)具有廣泛的可復(fù)用性,而業(yè)務(wù)的可復(fù)用性極差;第三是元數(shù)據(jù)注重結(jié)構(gòu),而業(yè)務(wù)注重行為。
??? 實例層:直接描述特異化的數(shù)據(jù)場景;
??? 元數(shù)據(jù)層:描述實例的結(jié)構(gòu)的一組數(shù)據(jù);
??? 元數(shù)據(jù)的元數(shù)據(jù)層:描述元數(shù)據(jù)的結(jié)構(gòu)的一組數(shù)據(jù)。
??? 元數(shù)據(jù)就是用來描述實例或者描述元數(shù)據(jù)的一種結(jié)構(gòu)。
??? 元數(shù)據(jù)的特征有這樣幾個:第一是元數(shù)據(jù)一定不依賴業(yè)務(wù)反而被業(yè)務(wù)所依賴,相當(dāng)業(yè)務(wù)的多變性,元數(shù)據(jù)是相對穩(wěn)定的;第二是元數(shù)據(jù)具有廣泛的可復(fù)用性,而業(yè)務(wù)的可復(fù)用性極差;第三是元數(shù)據(jù)注重結(jié)構(gòu),而業(yè)務(wù)注重行為。
?
??? 在Xml中,元數(shù)據(jù)就是模式(Schema),在數(shù)據(jù)庫中,元數(shù)據(jù)就是數(shù)據(jù)庫對象定義,包括表、視圖、關(guān)系約束、存貯過程、觸發(fā)器、函數(shù)、數(shù)據(jù)庫用戶、數(shù)據(jù)庫角色等等定義。在對象空間,元數(shù)據(jù)就是類型、接口、方法、方法參數(shù)、屬性的定義。在結(jié)構(gòu)化程序空間,元數(shù)據(jù)就是函數(shù)及函數(shù)的參數(shù)。
?
??? 我之所以反復(fù)強調(diào)參數(shù),是因為我們在定義一個接口或者方法的參數(shù)時總是非常隨便,但定義一個Xml文檔模式或者數(shù)據(jù)庫對象時總是小心翼翼的,很受束縛。這顯然有一定的不合理之處。仔細(xì)推敲,我的結(jié)論就是:第一,我們設(shè)計每個方法的參數(shù)時,特別是設(shè)計每個虛擬方法的參數(shù)時一定要小心一點,盡量不要濫用參數(shù)重構(gòu)。第二,我們在設(shè)計一個Xml文檔結(jié)構(gòu)或者數(shù)據(jù)庫結(jié)構(gòu)的時候可別那么畏首畏尾的,就象平時寫程序時設(shè)計一個方法的參數(shù)那樣。這樣就平衡了。
?
??? 總結(jié)以往多年的數(shù)據(jù)庫設(shè)計,我歸納為兩個原則和兩個方法:
??? 降冗優(yōu)先原則(降冗是數(shù)據(jù)庫設(shè)計時的首要要素);
??? 平行引用原則(所有的關(guān)系都必須是單向的并且不能交叉);
??? 依職責(zé)拆分方法(同一基數(shù)不同職責(zé)或者不同的維護方法或者不同的維護期必須拆分);
??? 依基數(shù)合并方法(同一基數(shù)且職責(zé)相同必須合并)。
??? 降冗優(yōu)先原則(降冗是數(shù)據(jù)庫設(shè)計時的首要要素);
??? 平行引用原則(所有的關(guān)系都必須是單向的并且不能交叉);
??? 依職責(zé)拆分方法(同一基數(shù)不同職責(zé)或者不同的維護方法或者不同的維護期必須拆分);
??? 依基數(shù)合并方法(同一基數(shù)且職責(zé)相同必須合并)。
?
??? 忽然發(fā)現(xiàn),其實這些原則和方法在整個元數(shù)據(jù)層都適用,不僅僅只針對數(shù)據(jù)庫設(shè)計。
?
?