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