第一章 数据仓库理论专题
1、數據倉庫概述
1.1、誕生背景
(1)歷史數據積存
歷史數據使用頻率低,積壓在業務庫中,導致業務系統的性能下降;企業定期將冷數據存儲到數據倉庫中(2)企業數據分析需要
各個部門自己建立獨立的數據抽取系統,導致數據不一致各個部門直接從業務庫抽數進行報表生成,資源浪費,權限管理風險;數據倉庫為各個部門建立了一個統一的數據視圖,各個部門的數據統一一致;1.2、數據倉庫概念
1.2.1、數據倉庫定義
- 概念:面向主題的、繼承的、非易失的且隨時間變化的數據集合
1.2.2、數據倉庫特點
- Ⅰ、面向主題:為數據分析提供服務,根據**主題將原始數據集合聚合在一起
- Ⅱ、集成:原始數據來源于不同數據源,要整合成最終數據,需要i經過抽取、清洗、轉換的過程
- Ⅲ、非易失:保存的是一系列歷史快照,不允許被修改,只能通過工具進行查詢、分析;
- Ⅳ、數倉定期接收、集成新的數據,從而反映出數據的最新變化;
1.2.3、數據倉庫與數據庫的區別
- Ⅰ、數據庫
- Ⅱ、數據倉庫
- 數據庫VS數據倉庫
1.3、數據倉庫技術實現
1.3.1、傳統數據倉庫
(1)由多個單機的關系型數據庫組成MMP(大規模并行處理)集群,進行數據存儲和計算
(2)數據通過提前調度分配到各個節點進行存儲,一般數據采用hash分配,每個節點存儲一部分數據;
(3)每個節點的計算/查詢任務計算出的結果也是部分結果,這些部分結果會匯總成一個準確的完整的結果進行返回;???
- 傳統數倉的缺點
1.3.2、大數據數倉
- Ⅰ、大數據數倉概述
(1)分布式存儲,分布式計算,利用大數據天然擴展性,完成海量的數據存放;
(2)將SQL轉換為大數據計算引擎任務,完成數據分析;
(3)將SQL轉換為大數據計算任務引擎,完成數據分析;
- Ⅱ、數據處理方面 - 移動計算(而不是移動數據)
- Ⅲ、大數據數倉特點
- Ⅳ、大數據數倉的缺點
- 大數據的數據倉庫在數據少的時候計算速度比較慢,因為是完全分布式的;
- 任務計算時,會對任務進行拆分,然后調度到各個節點,最后對結果進行合并;
- 在數據量沒有達到一定程度時,只是人物的轉換、分發、調度、匯總整個過程就會花費大量時間;
1.4、MPP架構
1.4.1、MPP架構概述
(1)傳統數倉中常見的技術架構,將單機數據庫節點組成集群,提升整體處理性能;
(2)節點間為非共享架構(每個節點獨立存在,不關心集群整體狀態,不關心其他節點的存儲信息),每個節點都有獨立的磁盤存儲系統和內存系統;
(3)每臺數據節點通過專用網絡或商業通用網絡互相連接,彼此協同計算,為整體提供服務;
- 計算任務中,如需要使用其他節點的數據,則通過高速網絡點對點傳輸;
(4)設計上優先考慮C(一致性),其次考慮A(可用性),盡量做好P(分區容錯性);
1.4.2、MPP架構優點
(1)運算方式精細,延遲低,吞吐低;
(2)適合中等規模的結構化數據處理;
(3)MPP致力于實現分布式事務
(4)MPP架構沒辦法單獨運行局部應用,只能作為整體進行對外服務;
1.4.3、MPP架構缺點
(1)存儲位置不透明,通過hash確定數據所在的物理節點,查詢任務在所有節點執行;
- 非共享架構導致數據存儲位置不透明,導致執行查詢任務時在所有節點執行;
(2)并行計算時,**單個節點會成為整個系統短板,**容錯性差;
- 解決方式:當這個節點運行緩慢時,將緩慢數據節點的數據通過高速網絡分發到其他節點進行處理,但是集群規模越大,單個節點發生故障的幾率越大;
(3)分布式事務的實現會導致擴展性降低
- 集群規模越大,單個節點發生故障的幾率越大;
1.5、分布式架構
(1)大數據中常見的技術架構,也成為Hadoop架構/批處理架構;
(2)各個節點實現場地自治(可單獨運行局部應用),數據在集群中全局透明共享;
- 將每個節點存儲資源拿出來共同組成一個分布式存儲文件系統,各個節點被拿走存儲資源后,剩下就是計算資源;
- 當每個任務分發到單個節點上,節點進行計算時,可訪問公共的存儲系統,找到數據在那個位置進行計算,所以可以單獨進行局部應用
(3)每臺節點通過局域網或廣域網相連,節點間的通信開銷較大,在運算時致力于減少數據移動;
(4)優先考慮的是P(分區容錯性),然后是A(可用性),最后是C(一致性)。
- 對中間結果進行存儲,且數據移動開銷會比較大
1.6、MPP+分布式架構
- 數據存儲采用分布式架構中的公共存儲,提高分區容錯性;
- 上層架構采用MPP,減少運算延遲
1.7、常見數據倉庫產品
//1、傳統數據倉庫 Oracle DB2 Teradata Greenplum//2、大數據數據倉庫 Hive Spark SQL HBase impala HAWQ TIDB2、數據倉庫架構
2.1、數據倉庫架構設計
2.1.0、OLTP與大數據倉庫的關系
1、數據倉庫數據來源業務數據:來自OLTP集群,通過Sqoop落HDFS上日志數據:來自服務的日志文件 ,通過kafka落HDFS上2.1.1、ETL - 數據抽取、清洗、轉換、加載
結構化數據:sqoop,Kettle結構化數據:直接將原系統數據抽取、加載到ODS層 非結構、半結構化數據(日志、文件):Flume2.1.2、ODS層 - 數據貼源層
目的:與原始數據保持一致存儲業務數據庫的數據,不進行數據修改2.1.3、DW層 - 公共維度模型層
- Ⅰ、DWD層:數據明細層 – 滿足三范式形式
- 明細層:存的是各種零散表,零散表與業務系統相差不多的,只不過是清洗后的業務系統的表;
- Ⅱ 、DWS層:數據匯總層 – 脫離三范式,維度建模,以寬表形式存在
- 對DWD層的明細表進行匯總,比如將用戶行為相關的數據存進一張大表,形成用戶行為寬表;
2.1.4、ADS層 - 數據應用層(數據集市層)
ADS層:保存數據分析的結果數據,使用傳統數據庫搭建2.2、ETL流程
2.2.1、ETL概述
(1)將數據從來源端經過抽取、交互轉換、加載至目的端的過程;
構建數據倉庫的重要一環,用戶型數據源抽取所需的數據,經過數據清洗,最終按照預算定義好的數據倉庫模型,將數據加載到數據倉庫中;(2)ETL規則的設計和實時約占整個數據倉庫搭建工作量的60%-80%;
2.2.2、數據抽取(E-JOB)
(1)數據源
- 抽取的數據源可以分為結構化數據、非結構化數據、半結構化數據;
- 結構化數據一把采用JDBC、數據庫日志方式,非/半結構化數據會監聽文件變動
(2)抽取方式
- 數據抽取方式有全量同步、增量同步兩種方式
2.2.3、數據清洗
- 數據清洗要經歷數據清洗和轉換兩個階段
- 結構化數據抽取與源系統保持一致,數據清洗任務量很小,基本只要去重即可;
- 數據清洗和轉換主要集中在非結構化、半結構化數據;
2.2.4、數據加載
- 將最后處理完的數據導入到對應的目標源中;
2.2.5、ETL工具
// 1、結構化數據ETL工具 Sqoop通過JDBC連接結構化數據庫進行數據抽取,使用并發處理方式,批量導入大數據的數據倉庫里面;生產中使用1.x版本,2.0版本功能完善導致性能下降; Kettle Datastage Information Kafkakafka是一個消息隊列,提供ETL功能,支持ETL操作,將數據抽取出來之后存在消息隊列里面,等待下游的數據倉庫的抽取;// 2、非/半結構化數據 Flume支持對日志文件進行數據監控,一旦有變動將數據抽取出來; Logstash2.3、數據積存(ODS層)
(1)數據與源業務數據保持一致,可以增加審計字段用來進行數據管理
(2)存儲的歷史數據是只讀的,提供業務系統查詢使用
- 業務系統會將定期將導入數據倉庫的業務數據庫中的數據刪除掉
(3)修改只可追加:業務系統對歷史數據完成修改后,將update_type字段更新為UPDATE,追加回ODS層
(4)在離線數倉中業務數據定期通過ETL流程放到如ODS中,導入方式有兩種
--全量導入:數據的第一次導入,選擇此種方式; --增量導入:數據非第一次導入,每次只需倒入新增、更改的數據,建議使用外連接&全覆蓋方式case:針對大數據平臺不能修改數據的限制
-
Ⅰ、外連接
-
Ⅱ、全覆蓋
2.4、數據分析(DWD/DWS/ADS)
2.4.1、DWD - 數據明細層
- 數據仍滿足3NF模型,為分析運算做準備;
- 數據明細層對ODS層的數據進行清洗,標準化、維度退化
- 范例:將維表數據整合到事實表中;
- 范例:各個不同城市子公司的用戶表,添加一個城市字段后union
2.4.2、DWS - 數據匯總層
-
數據匯總層:對數據明細層的數據進行計算匯總,存放便于分析的大寬表;
-
存儲模型:更加注重與數據聚合,復雜查詢,處理性能更優的數倉模型;
- 傳統數倉:以維度模型為主;
- 大數據數倉:以寬表模型為主
2.4.3、ADS - 數據應用層
- 數據應用層:數據集市;
- 主要作用:存儲數據分析結果,為不同業務場景提供外部接口,減輕數據倉庫的負擔
3、數據倉庫建模
3.1、建模基本概念
3.1.1、OLTP傳統建模方法
(1)OLTP(在線事務處理)系統中,主要操作是隨機讀寫;
用于業務數據,主要是對業務數據庫提供數據存儲和數據操作的服務;(2)使用關系模型建模(ER模型),保證數據一致性,減少冗余;
ER模型原則盡量將表拆分,拆分的越細越好,盡量滿足3NF的規則,減少冗余3.1.2、OLAP在線聯機分析
(1)基本概念
-
OLAP系統:主要操作是復雜分析查詢,關注數據整合以及分析,處理性能
-
OLAP根據存儲方式的不同:分為ROLAP、MOLAP、HOLAP;
(2)系統分類
- Ⅰ、ROLAP:關系型OLAP
- Ⅱ、MOLAP:多維型OLAP
- Ⅲ、HOLAP:混合架構的OLAP
3.2、ROLAP - DWS層
- 業務場景:ADS層
3.2.1 維度模型
-
分為星形模型,雪花模型,星座模型
-
方便對數據多維分析
3.2.2、星型模型
- 標準的星型模型維度只有一層,分析性能最優;
- 星型模型與雪花型模型的區別
3.2.3、雪花模型
- 雪花模型具有多層維度,比較接近三范式設計
3.2.4、星座模型
- 星座模型基于多個事實表,事實表之間會共享一些維度表;
3.2.5、寬表模型
-
大數據數倉里面,join使得大量數據移動導致性能不佳
-
寬表模型:將維度冗余到事實表中,形成寬表,以此減少join操作;
3.3、MOLAP - ADS層
- 特點:以空間換時間;靈活性較低,不存儲原始數據
- 業務場景:應用于ADS層
(1)MOLAP將數據進行預結算,并將聚合結果存儲到CUBE模型中;
(2)CUBE模型以多維數組的形式,物化到存儲系統中,加快后續的查詢;
(3)生成cube需要大量的時間,空間,維度預處理可能導致數據膨脹;
- 常見的MOLAP產品:Kylin,Druid
3.4、OLAP多維分析
- OLAP主要操作時復雜查詢,可以多表關聯,使用count、sum、avg等函數;
- OLAP對復雜查詢做了直觀的定義,包括鉆取、切片、切塊、旋轉;
3.4.1、鉆取
- 鉆取:對維度不同層次的分析,通過改變維度的層次來變換分析的粒度;
3.4.2、切片/切塊
- 切片:選擇某個維度進行分割;
- 切塊:按照多維進行切片;
3.4.3、旋轉
- 旋轉:對維度方向的互換,類似于坐標軸上卷
4、數據倉庫最佳實踐
4.1、表的分類
4.1.1、事實表
- 事實表數據:一般指一個現實存在的業務對象;比如用戶,商品,商家等;
(1)事務事實表 – 順序追加
- 隨著業務不斷產生的數據,一般產生不會再發生變化,如交易流水,操作日志,出庫入庫記錄;
(2)周期快照事實表 – 順序追加
-
隨著業務周期型的推進而變化,完成間隔周期內的度量統計,如年、季度累計;
-
使用周期+狀態度量組合,如年累計訂單數,年是周期,訂單總數是度量;
(3)累計快照事實表 – 隨機修改
- 記錄不確定周期的度量統計,完全覆蓋一個事實的生命周期,如訂單狀態表;
- 通常有多個時間字段,用于記錄生命周期中的關鍵節點;
- 只有一條記錄,針對此記錄不斷更新;
- 累計快照事實表實現方式
4.1.3、維度表
- 維度表數據:一般是指一些業務狀態,代碼的解釋表(即碼表)。
- 通常使用維度對事實表中的數據進行統計、聚合運算
4.1.4、拉鏈表
- 拉鏈表:記錄每條信息的生命周期,用于保留數據的所有歷史變化狀態;
- 拉鏈表將表數據的隨機修改方式變為順序追加;
- 拉鏈表的實現策略
- 1、拉鏈表實現方式 – 增量數據與目標表通過主鍵做全量關聯
4.2、ETL策略
- ETL策略分為兩種:全量同步&增量同步;
4.2.1、全量同步
- 業務場景:數據初始化裝載使用全量同步方式;
- 因為業務/技術原因,比如第三方給的數據,使用全亮的方式做周期數據更新,直接覆蓋原有的數據即可;
- 利用分區保存每天數據,可保存較短周期;
4.2.2、增量同步
- 業務場景:除了第一次全量同步完后,之后的每次的數據都是增量同步;
(1)結構化數據
- 抽取方式:
- JDBC抽取:業務數據的時間戳抽取;
- 日志抽取:對數據庫日志進行抽取,數據庫日志是追加的,對某個時間點之后的數據會更容易追加到;
(2)非結構/半結構化數據
- 抽取工具:自帶監控功能,可以實時監控變動數據;
(3)增量數據更新方式
- Ⅰ、傳統數據整合方案:大多數采用merge方式(update+insert)
- Ⅱ、主流大數據平臺:不支持update操作,可采用全外連接+數據全量覆蓋方式
4.3、任務調度
4.3.1、任務調度必要性
- 定時:自動化完成任務的定時執行;
- 制定節點:解決任務單元間的依賴關系;
4.3.2、調度任務類型
- shell:用于啟動數據倉庫的集群組件,比如ETL的采集組件;
- java:數據清洗任務;
- mapreduce:Mapreduce執行特定功能,吞吐量更高;
- SQL腳本:數據的DDL,數據處理任務等;
4.3.3、常見調度工具
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Yx4C9AFA-1627957839829)(C:\Users\李海偉\AppData\Roaming\Typora\typora-user-images\image-20210604164125162.png)]
5、常見面試題
5.1、范式建模和維度建模的區別
范式模型:從流程上看是自上而下的,自上而下指的是數據的流向,“上”即數據的上游,“下”即數據的下游,即從分散異構的數據源 -> 數據倉庫 -> 數據集市。:以數據源頭為導向,然后一步步探索獲取盡量符合預期的數據,因為數據源往往是異構的,所以會更加強調數據的清洗工作,將數據抽取為實體-關系模型,并不強調事實表和維度表的概念。 特點 :1、能夠結合業務系統的數據模型,較方便的實現數據倉庫的模型;:2、同一份數據只存放在一個地方,沒有數據冗余,保證了數據一致性;:3、數據解耦,方便維護。缺點:表的數量多;查詢時關聯表較多使得查詢性能降低。維度模型:從流程上看是自下而上的,即從數據集市-> 數據倉庫 -> 分散異構的數據源。:Kimball 是以最終任務為導向,將數據按照目標拆分出不同的表需求,數據會抽取為事實-維度模型,數據源經ETL轉化為事實表和維度表導入數據集市,以星型模型或雪花模型等方式構建維度數據倉庫,架構體系中,數據集市與數據倉庫是緊密結合的,數據集市是數據倉庫中一個邏輯上的主題域。 特點:1、維度建模:模型結構簡單,面向分析,為了提高查詢性能可以增加數據冗余,反規范化的設計,開發周期短,能夠快速迭代。缺點:就是數據會大量冗余,預處理階段開銷大,后期維護麻煩;還有一個問題就是不能保證數據口徑一致性,原因后面有講解。范式建模:必須符合準三范式設計規范,如果使用混合建模,則源表也需要符合范式建模的限制,即源數據須為操作型或事務型系統的數據。通過ETL抽取轉換和加載到數據倉庫的ODS層,ODS層數據與源數據是保持一致的,所以ODS層數據也是符合范式設計規范的,通過ODS的數據,利用范式建模方法,建設原子數據的數據倉庫EDW,然后基于EDW,利用維度建模方法建設數據集市。- 建模思路
總結
以上是生活随笔為你收集整理的第一章 数据仓库理论专题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 五子棋网络对战 java实现
- 下一篇: 馨旅