大話數(shù)倉,數(shù)據(jù)倉庫
數(shù)據(jù)倉庫,是越來越流行的數(shù)據(jù)解決方案。傳統(tǒng)煙囪式的數(shù)據(jù)開發(fā)模式,顯然不能滿足日益增長的數(shù)據(jù)需求,而作為大數(shù)據(jù)量化方案、解決大數(shù)據(jù)問題、發(fā)掘數(shù)據(jù)價值的大數(shù)據(jù)倉庫被很多公司采納使用。想要建設(shè)好數(shù)據(jù)倉庫,就要了解數(shù)據(jù)倉庫模型設(shè)計及其原理、怎樣處理數(shù)據(jù)倉庫建設(shè)的需求分析?又如何處理基礎(chǔ)數(shù)據(jù)元和維度表、事實表?下面就來簡單談?wù)剶?shù)據(jù)倉庫。
一、什么是數(shù)據(jù)倉庫?
數(shù)據(jù)倉庫的概念
數(shù)據(jù)倉庫是一個面向主題的、集成的、時變的、非易失的數(shù)據(jù)集合,用于支持管理決策、商業(yè)營銷、運(yùn)營分析。數(shù)據(jù)倉庫實際上是一種數(shù)據(jù)存儲,它將各種異構(gòu)數(shù)據(jù)源中的數(shù)據(jù)集成在一起,并保持其語義一致,為企業(yè)決策提供支持。
1.面向主題。在較高層次對數(shù)據(jù)綜合、歸類,針對某一分析領(lǐng)域所抽象出來的分析對象。
構(gòu)建主題的步驟:首先抽象出需要分析的主題域,確定每個主題域需要分析的維度、其所包含哪些數(shù)據(jù)表。一般主題域所有表都有一個連接鍵,作為主題的一部分,通過這個連接鍵可把主題域所有表關(guān)聯(lián)匯總成一張寬表。如會員主題,分為會員基本信息、會員積分?jǐn)?shù)據(jù)、會員的資產(chǎn)數(shù)據(jù)、會員的行為數(shù)據(jù)、會員的信用等多張表。
2.集成的。數(shù)據(jù)來源的格式類型不同;編碼、命名格式、屬性單位不一致,然后對原有數(shù)據(jù)進(jìn)行綜合、計算。
把不同表、不同類型的數(shù)據(jù)放入到統(tǒng)一的數(shù)據(jù)倉庫中。如Mysql、Oracle、Redis、Hbase中的數(shù)據(jù),我們通過同步全量數(shù)據(jù)把數(shù)據(jù)存入統(tǒng)一的系統(tǒng)中。對于增量數(shù)據(jù)設(shè)置定時抽取,可以采用并發(fā)架構(gòu),多任務(wù)同時同步,把數(shù)據(jù)持續(xù)存到我們的分布式文件系統(tǒng)中來。
3.時變的。數(shù)據(jù)倉庫的數(shù)據(jù)是不同時間的數(shù)據(jù)集合;隨時間變化不斷增加、刪除、綜合數(shù)據(jù);數(shù)據(jù)倉庫表結(jié)構(gòu)中一般都帶有時間字段。
數(shù)據(jù)倉庫的數(shù)據(jù)不是一成不變的,它是隨著時間變化不斷新增內(nèi)容,更新與時間有關(guān)的綜合數(shù)據(jù),這些數(shù)據(jù)一般都包含有時間字段。
4.穩(wěn)定非易失的。.數(shù)據(jù)倉庫中的數(shù)據(jù)一般只插入新增,不做update更新、delete刪除操作。
數(shù)據(jù)是經(jīng)過抽取而形成的分析型數(shù)據(jù),不具有原始性(不是第一手?jǐn)?shù)據(jù),一般是經(jīng)過其他數(shù)據(jù)源或業(yè)務(wù)系統(tǒng),抽取到數(shù)據(jù)倉庫中),主要供企業(yè)決策分析之用,執(zhí)行的主要是查詢操作,一般情況下不執(zhí)行更新操作。抽到數(shù)據(jù)倉庫的數(shù)據(jù)在ODS層不做任何操作,來保持?jǐn)?shù)據(jù)的原始性(不改變字段屬性,不補(bǔ)值等操作)。
二、數(shù)據(jù)倉庫建模理論
數(shù)據(jù)一般用于兩種目的,一種是基于操作型記錄保存,一種是分析決策的制定。簡單來說,前者是操作系統(tǒng)保存數(shù)據(jù)(OLTP-聯(lián)機(jī)事務(wù)處理),一般僅反映數(shù)據(jù)的最新狀態(tài),按單條記錄事務(wù)性來處理數(shù)據(jù);其優(yōu)化的核心是更快地處理事務(wù);后者是分析系統(tǒng)使用數(shù)據(jù)(OLAP-聯(lián)機(jī)事務(wù)分析),按大批量方式處理數(shù)據(jù);其核心是高性能、多維度處理數(shù)據(jù)。針對兩種不同的數(shù)據(jù)用途,如何組織數(shù)據(jù),高效的使用數(shù)據(jù),這里就涉及到數(shù)據(jù)建模的問題。
2.1、什么是Inmon范式模型?
數(shù)據(jù)倉庫是商業(yè)智能的一部分,一家企業(yè)或公司只有一個數(shù)據(jù)倉庫,數(shù)據(jù)集市的信息皆來源數(shù)據(jù)倉庫?,F(xiàn)在的數(shù)據(jù)庫大多數(shù)都是依據(jù)3FN范式來建立的,而依據(jù)范式的思想來進(jìn)行數(shù)據(jù)倉庫建模,就是范式建模。數(shù)據(jù)倉庫中的數(shù)據(jù)信息必須符合第三范式。
范式是關(guān)系型數(shù)據(jù)庫的基本概念。是指符合某些條件、符合某些規(guī)則的關(guān)系集合。范式是分級的,每向上一級,條件和規(guī)則更加嚴(yán)格,每一級是下一級的子集。
范式最主要的目的是消除冗余,每一份信息必須存放一次,也只能存儲一次。數(shù)據(jù)的冗余不僅僅會造成存儲資源的浪費,而且可能會引發(fā)數(shù)據(jù)的更新異常。
2.2、什么是Kimball維度建模?
數(shù)據(jù)倉庫是公司內(nèi)部所有數(shù)據(jù)集市的集合,信息總是被存儲在多維模型中。是面向數(shù)據(jù)集市、數(shù)據(jù)主題的,一般采用星型模型建模。依據(jù)星型模型,構(gòu)建事實表和維度表,建立數(shù)據(jù)倉庫模型的過程,就是維度建模。Kimball的核心思想就是星型模型和維度建模。
2.2.1、什么是星型模型?
所有的表直接與事實表關(guān)聯(lián),整個圖解就像星星一樣,該模型稱為星型模型。星型模型是一種非正規(guī)化的結(jié)構(gòu),是反范式的。因為多維數(shù)據(jù)集的每一個維度都直接與事實表相連接,不存在漸變維度,所以數(shù)據(jù)有一定的冗余,
2.3、事實表和維度表
事實表描述業(yè)務(wù)過程的度量、以可加數(shù)據(jù)為主題,每一行代表一個可以觀察的實體或事件。主要的是發(fā)生了業(yè)務(wù)過程,如賣出一件商品,用戶購買一件商品,這都觸發(fā)了業(yè)務(wù)過程。賣出的商品有商品屬性、有賣出的門店、有出貨記錄,有購物者信息等等。
維度表描述事實所處的環(huán)境、面向分析,代表針對事實的一種分類。直白點,維度表就是用來描述事實的。還以賣出商品為例,賣出的商品,商品有屬性,包括顏色、尺碼、風(fēng)格、季節(jié)等多種屬性,這些屬性組合在一起就構(gòu)成了描述商品的維度表。
對維度表再建立更細(xì)的維度,稱為支架表。支架表是維度表的維度表,支架表是去冗余的產(chǎn)物,在星型模型中,對冗余很寬容。所以支架并不是必須的,并且應(yīng)該盡量少用。合適的方法是:將支架表合并到和事實表直接連接的維度表。
注意:維度表中需要注意維度退化和緩慢變化維
退化維度:在維度類型中,有一種重要的維度稱作為退化維度,亦稱維度退化。這種維度指的是直接把一些簡單的維度放在事實表中。維度退化是維度建模領(lǐng)域中的一個非常重要的概念,它對理解維度建模有著非常重要的作用,維度退化一般在分析中可以用來做分組使用。
緩慢變化維:維度的屬性并不是始終不變的,它會隨著時間的流逝發(fā)生緩慢的變化,這種隨時間發(fā)生變化的維度我們一般稱之為緩慢變化維。
常用處理緩慢變化維的方式:用戶變更手機(jī)號碼
EX1,直接覆蓋原值。
EX2,增加維度行。
在增加新行時,需為其分配新的代理鍵。并且,至少需要在維度行再增加三列:有效日期、結(jié)束日期、行狀態(tài),可以使用拉鏈表處理。
EX3,增加新的屬性列。
2.2、什么是雪花模型?
當(dāng)有維表沒有直接連接到事實表上,而是通過連接其他維表間接連接到事實表,其圖解就像多個雪花連接在一起,故稱雪花模型。雪花模型是對星型模型的擴(kuò)展。它對星型模型的維表進(jìn)一步層次化,把原有的維表進(jìn)一步拓展,形成更多細(xì)分層次。
處理雪花模型的方式,和支架表一樣,理想的模型是只存在和事實表直接相連接的維度表。在數(shù)據(jù)倉庫中,數(shù)據(jù)冗余不重要,連接性能更重要!我們通過犧牲空間來換取時間,這些數(shù)倉很常用的手段。
雪花模型是一種規(guī)范的數(shù)據(jù)建模模型,規(guī)范化的目的是去冗余,在節(jié)省存儲的同時減少重復(fù)更新。但是對于數(shù)據(jù)倉庫來說,這兩者都不重要,數(shù)據(jù)倉庫本來就不更新。Kimball模式的數(shù)據(jù)倉庫的查詢性能優(yōu)先!星型模型,是反范式的
總結(jié):數(shù)據(jù)倉庫建模過程是一個很復(fù)雜的過程,一方面不僅要根據(jù)自家業(yè)務(wù)處理建模需要,一方面還要深入了解建模的理論基礎(chǔ)。