10分鐘了解啥是數倉
本文轉載自微信公眾號「sowhat1412」,作者sowhat1412。轉載本文請聯系sowhat1412公眾號。
隨著互聯網及物聯網等技術發展,越來越多的數據被生成,如何有效利用這些數據就成為了企業決勝的法寶了。大型公司會基于數據做出BI、推薦系統、決策支持、統計分析、報表等業務。
其中數據存儲涉及眾多知識點,本文目的就是對這些名詞術語及內涵進行解析,便于讀者對數據平臺相關的概念有全面的認識。
1 OLTP VS OLAP
1970年隨著關系數據庫理論的提出,誕生了一系列經典的RDBMS,如MySQL、Oracle、SQL Server、DB2等。這些RDBMS為社會信息化的發展做出的重大貢獻。然而隨著數據庫使用范圍的不斷擴大,它被逐步劃分為操作型數據庫OLTP跟分析型數據庫OLAP。
1.1 OLTP
操作型數據庫OLTP(On-Line Transaction Processing 聯機事務處理)也可以稱面向交易的處理系統,它是針對具體業務在數據庫聯機的日常操作,通常對記錄進行CRUD。
OLTP模式下用戶較為關心操作的響應時間、數據的安全性、完整性和并發支持的用戶數等問題。傳統的數據庫系統作為數據管理的主要手段,主要用于操作型處理。
1.2 OLAP
分析型數據庫OLAP(On-Line Analytical Processing)叫聯機分析處理,主要用于歷史數據分析。這類數據庫作為公司的單獨數據存儲,負責利用歷史數據對公司各主題域進行統計分析。為啥要分成操作型跟分析型呢?原因是他們有太多不同了!
對比
1.3 操作型OLTP VS 分析型OLAP
之所以區分為操作型跟分析型,那是因為這倆的核心功能不同!前者主要是面向操作,后者主要是面向分析,在細節上存在眾多差異。
1.3.1 數據組成差別
數據時間范圍不同:一般操作型數據庫只存放90天內數據,分析型數據存放數年內數據,所以這倆要進行物理分離。
數據細節差異不同:操作型數據庫主要存放細節數據,匯總數據是動態技術而成的。分析型數據庫中既存放細節數據又存放用戶關系的匯總數據。
數據時間表示不同:操作型數據庫反應的是當前狀態,分析師數據庫中既又當前狀態又有過去各時刻的快照數據。
1.3.2 技術差別
查詢數量跟頻率不同:操作型數據庫查詢頻率但量小,分析型數據庫查詢量大但頻率小。
數據更新不同:操作型數據庫設計到用戶CRUD。分析型數據庫屬于歸檔性質存儲,只提供查詢。
數據冗余性不同:操作型數據庫在設計表的時候就會減少數據冗余避免更新復雜。分析型數據庫中則只有查詢功能,因此數據冗余性一般都存在。
1.3.3 功能差別
數據讀者不同:操作型數據的使用者是業務環節下的各個角色,比如用戶、商家等。分析型數據庫一般只有研發跟數據分析人員專門使用。
定位不同:操作型數據庫主要是面向應用層的數據庫,是為了支持具體業務而存在的。分析型數據庫是針對特定業務主體域的分析人物而創建的,是面向主體型數據庫。
2 數倉
2.1 數倉簡介
數倉發展
隨著人類IT發展,數據越來越多被產生,并且這些數據還可能跨部門,跨業務。如何把數據集成起來進行OLAP是個巨大挑戰。
數據倉庫(Data Warehouse)應運而生,數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合,用于支持管理中的決策制定。
數據倉庫是伴隨著企業信息化發展起來的,在企業信息化的過程中,隨著信息化工具的升級和新工具的應用,數據量變的越來越大,數據格式越來越多,決策要求越來越苛刻,數據倉庫技術也在不停的發展。數據倉庫的趨勢:
- 實時數據倉庫以滿足實時化&自動化決策需求。
- 大數據&數據湖以支持大量&復雜數據類型(文本、圖像、視頻、音頻)。
數倉發展
對于數倉可以理解為原來各個數據孤島中的數據可能存儲位置、存儲格式、編程語言等各個方面不同。數倉要做的就是把數據按照所需格式提取出來,進行轉換、過濾、清洗。最終裝載到數據倉庫,整個過程也叫ETL。
- 提取 Extraction:表示從操作型數據庫搜集指定數據。
- 轉換 Transformation:表示將數據轉化為指定格式,并進行數據清洗保證數據質量。
- 加載 Load:加載過程表示將轉換過后滿足指定格式的數據加載進數據倉庫。
隨著數倉的不斷普及跟使用,信息產業就開始從以關系型數據庫為基礎的運營式系統慢慢向決策支持系統發展。這個決策支持系統,其實就是我們現在說的商務智能(Business Intelligence)即BI。
可以這么說,數據倉庫為OLAP解決了數據來源問題,數據倉庫和OLAP互相促進發展,進一步驅動了商務智能的成熟,但真正將商務智能賦予智能的,其實是數據挖掘。
2.2 數倉特征
2.2.1 面向主題
面向主題特性是數據倉庫和操作型數據庫的根本區別。
操作型數據庫是為了支撐各種業務而建立,是按照業務功能進行組織的。
分析型數據庫則是為了對從各種繁雜業務中抽象出來的分析主題進行分析而建立。
所謂主題是指用戶使用數據倉庫進行決策時所關心的重點方面,如:收入、客戶、銷售渠道等。所謂面向主題,是指數據倉庫內的信息是按主題進行組織的。
2.2.2 集成性
集成性指數據倉庫中的信息不是從各個業務系統中簡單抽取出來的,而是經過一系列加工、整理和匯總的過程,因此數據倉庫中的信息是關于整個企業的一致的全局信息。
2.2.3 企業范圍
數據倉庫內的數據是面向公司全局的。比如某個主題域為成本,則全公司和成本有關的信息都會被匯集進來。
2.2.4 歷史性
較之操作型數據庫,數據倉庫的時間跨度通常比較長。前者通常保存幾個月,后者可能幾年甚至幾十年。
2.2.5 時變性
時變性是指數據倉庫包含來自其時間范圍不同時間段的數據快照。有了這些數據快照以后,用戶便可將其匯總,通過這些信息,可以對企業的發展歷程和未來趨勢做出定量分析和預測。
2.3 數倉架構
2.3.1 架構
數據倉庫標準上可以分為四層:ODS(臨時存儲層)、PDW(數據倉庫層)、DM(數據集市層)、APP(應用層)。
DWBI
各個系統的數據通過ETL同步到操作性數據倉庫ODS中,對ODS數據進行面向主題域建模形成DW(數據倉庫),DM是針對某一個業務領域建立模型,具體用戶(決策層)查看DM生成的報表。
- 臨時存儲數據運營層:ODS(Operational Data Store):
ODS層將來自不同數據源的數據通過ETL(Extract-Transform-Load)過程匯聚整合成面向主題的、集成的、企業全局的、一致的數據集合。現在可選擇的大數據同步技術也比較多,如datax,canal,kafka等。這一層的主要目的是把源系統的數據基本原樣(有些數據敏感等級高不同步)的同步到大數據平臺,因此比較容易進行方案的統一。
- 倉庫層:DW(Data Warehouse):
DW為數據倉庫層,DW層的數據應該是一致的、準確的、干凈的數據。主要有清洗,拆分,整合,標準化,備份,隔離幾個任務。即對源系統數據進行了清洗后的數據。這一層的數據一般是遵循數據庫第三范式的,在DW層會保存BI系統中所有的歷史數據,例如保存10年的數據。
DW : Data Warehouse 翻譯成數據倉庫,DW由下到上分為 DWD、DWB、DWS。
DWD:Warehouse Detail 細節數據層,有的也稱為 ODS層,是業務層與數據倉庫的隔離層
DWB:Data Warehouse Base 基礎數據層,存儲的是客觀數據,一般用作中間層,可以認為是大量指標的數據層。
DWS:Data Warehouse Service 服務數據層,基于DWB上的基礎數據,整合匯總成分析某一個主題域的服務數據,一般是寬表。
- 集市層:DM(Data Mart):
這一層有一個更直觀的叫法是寬表層,前面提到這一層主要是為了解決某一類的分析問題,也就是面向分析,既然是面向分析,那么一般來講是多個業務過程,而將多個業務過程融合成一個分析主題,勢必會關聯很多數據。寬表就是這樣來的。在OLAP分析工具還不是很成熟的時候,仍然建議構建多維寬表,這樣可以避免過多的模型間的關聯操作。一般用于機器學習的特征寬表存在于這一層。集市層構建的好壞有一個比較好的衡量標準就是是否可以滿足超過80%的應用層數據需要,剩下的20%來源于數倉層。
- 應用層:Application層:
該層數據完全是為了滿足具體的分析需求而構建的數據,從數據的廣度來說,則并不一定會覆蓋所有業務數據,而是DM層數據的一個真子集,從某種意義上來說是DM層數據的一個重復。面向應用的特點一般有以下幾個特征,靈活多變,簡單。靈活多變是說業務需要各種形式或者各種自定義口徑的數據,如KV結構的,各種條件來計算的。簡單指的是數據一般是高度匯總的,如報表或者核心KPI指標。
2.3.2 數倉分層原因
用空間換時間:通過大量的預處理來提升應用系統的效率,因此數據倉庫會存在大量冗余的數據。
解耦:不分層的話如果源業務系統的業務規則發生變化將會影響整個數據清洗過程,工作量巨大。
簡化:通過數據分層管理可以簡化數據清洗的過程,因為把原來一步的工作分到了多個步驟去完成,當數據發生錯誤的時,往往只需要局部調整某個步驟即可。
2.4 元數據介紹
2.4.1 元數據定義
數倉的元數據Metadata是關于數據倉庫中數據的數據。它的作用類似于數據庫管理系統的數據字典,可以簡答理解為一本書的目錄,保存了邏輯數據結構、文件、地址和索引等信息。廣義上講,元數據描述了數據倉庫內數據的結構和建立方法的數據,一般我們會用關系型數據庫來存儲這些數據,比如MySQL。
元數據是數據倉庫管理系統的重要組成部分,元數據管理器是企業級數據倉庫中的關鍵組件,貫穿數據倉庫構建的整個過程,直接影響著數據倉庫的構建、使用和維護。
- 構建數據倉庫的主要步驟之一是ETL。這時元數據將發揮重要的作用,它定義了源數據系統到數據倉庫的映射、數據轉換的規則、數據倉庫的邏輯結構、數據更新的規則、數據導入歷史記錄以及裝載周期等相關內容。數據抽取和轉換的專家以及數據倉庫管理員正是通過元數據高效地構建數據倉庫。
- 用戶在使用數據倉庫時,通過元數據訪問數據,明確數據項的含義以及定制報表。
- 數據倉庫的規模及其復雜性離不開正確的元數據管理,包括增加或移除外部數據源,改變數據清洗方法,控制出錯的查詢以及安排備份等。
元數據可分為技術元數據和業務元數據。
- 技術元數據為開發和管理數據倉庫的IT人員使用,它描述了與數據倉庫開發、管理和維護相關的數據,包括數據源信息、數據轉換描述、數據倉庫模型、數據清洗與更新規則、數據映射和訪問權限等。
- 業務元數據為管理層和業務分析人員服務,從業務角度描述數據,包括商務術語、數據倉庫中有什么數據、數據的位置和數據的可用性等,幫助業務人員更好地理解數據倉庫中哪些數據是可用的以及如何使用。
由上可見,元數據不僅定義了數據倉庫中數據的模式、來源、抽取和轉換規則等,而且是整個數據倉庫系統運行的基礎,元數據把數據倉庫系統中各個松散的組件聯系起來,組成了一個有機的整體,如圖所示
在這里插入圖片描述
2.4.2 元數據作用
在數倉中元數據的主要作用如下:
- 描述哪些數據在數據倉庫中,幫助決策分析者對數據倉庫的內容定位。
- 定義數據進入數據倉庫的方式,作為數據匯總、映射和清洗的指南。
- 記錄業務事件發生而隨之進行的數據抽取工作時間安排。
- 記錄并檢測系統數據一致性的要求和執行情況。
- 評估數據質量。
- 相當于寫了一部數據用戶指南手冊
2.5 數據治理
如果你做過推薦系統跟BI報表等基于數據的系統,你就會知道數據治理的重要性!如果做過機器學習就會知道數據遠遠比算法更重要。通常我們對數據質量的判斷來自準確性、完整性和一致性三方面,然而這三點原始數據通常并不具備,原始數據一般有如下留個特點。
- 數據重復
- 字段名跟結構前后不一致
- 某些記錄存在字段缺失
- 原始數據來源跟格式各不相同
- 重點數據存在異常值
在做數據清洗時,一般有如下幾點規則可尋:
- 確保原始數據的準確輸入
- 小心處理NA值跟字符串為空的字段
- 檢查字符型變量僅包含有效值
- 檢查數值型變量在預定范圍內
- 檢查是否存在缺失數據
- 檢查并刪除重復數據
- 檢查特殊值是否唯一
- 檢查是否存在無效數據
參考
數倉簡介:https://www.cnblogs.com/coco2015/p/11299620.html
數倉四萬字:https://t.1yb.co/lQt2