數據倉庫Data warehouse(可簡寫為DW或者DWH)建設的目的,是為前端查詢和分析作為基礎,主要應用于OLAP(on-line Analytical Processing),支持復雜的分析操作,側重決策支持,并且提供直觀易懂的查詢結果。目前行業比較流行:AWS Redshift,Greenplum,Hive等。
數據倉庫并不是數據的最終目的地,而是為數據最終的目的地做好準備,這些準備包含:清洗、轉義、分類、重組、合并、拆分、統計等。
每個公司可根據自己的業務需求分為不同的層次。目前比較成熟的數據分層:數據運營層ODS、數據倉庫層DW、數據應用層ADS(APP)。數據倉庫層又可以分為3個層:數據細節層DWD、數據中間層DWM、數據服務層DWS。
一、ODS層
ODS層(Operation Data Store )數據準備區,也稱為貼源層。數據源中的數據,經過抽取、洗凈、傳輸,也就是ETL過程之后進入本層。通常包含多個數據源,包括企業內部的各種業務系統、外部的數據供應商、第三方數據服務等。這些數據源通常具有不同的數據格式、結構、語義和質量,因此需要進行一系列的數據處理和轉換,以使其能夠被有效地集成到數據倉庫中。
ODS層的數據處理主要包括以下幾個方面:
數據抽取:從各個數據源中抽取數據,包括全量抽取和增量抽取等方式。
數據清洗:對抽取到的數據進行清洗和去重,確保數據的一致性和準確性。
數據集成:將清洗后的數據進行整合和集成,以生成一個一致的、可信的、實時的數據集。
數據同步:將ODS層的數據同步到下一層,即DWD層,以供后續的數據處理和分析。
ODS層的數據模型通常是基于源系統中的數據模型進行設計,其主要目的是將不同的數據源中的數據整合到一個統一的數據集中,并盡量保證數據的質量和可用性。ODS層的數據通常是面向業務過程和業務事件的,包含大量的原始業務數據和事件流數據,可以為企業提供實時的數據集成和分析能力。
ODS層是數據倉庫架構中的第一層,主要負責數據集成和整合,將多個數據源中的數據進行清洗、整合和同步,為后續的數據倉庫處理提供原始數據。ODS層的數據模型通常是基于源系統中的數據模型進行設計,其主要目的是將不同的數據源中的數據整合到一個統一的數據集中,并盡量保證數據的質量和可用性。
在源數據裝入這一層時,要進行諸如去噪(例如有一條數據中人的年齡是 300 歲,這種屬于異常數據,就需要提前做一些處理)、去重(例如在個人資料表中,同一 ID 卻有兩條重復數據,在接入的時候需要做一步去重)、字段命名規范等一系列操作。
但是為了考慮后續可能需要追溯數據問題,因此對于這一層就不建議做過多的數據清洗工作,原封不動地接入原始數據也可以,根據業務具體分層的需求來做。
這層的數據是后續數據倉庫加工數據的來源。數據來源的方式:
- 業務庫
- 經常會使用Sqoop來抽取,例如每天定時抽取一次。Sqoop是Apache旗下的一款開源工具。
- 實時方面,可以考慮用canal監聽mysql的binlog,實時接入即可。MySQL 的二進制日志 binlog 可以說是 MySQL 最重要的日志,它記錄了所有的 DDL 和 DML 語句(除了數據查詢語句select、show等),以事件形式記錄,還包含語句所執行的消耗的時間,MySQL的二進制日志是事務安全型的。binlog 的主要目的是復制和恢復。
- 埋點日志
- 日志一般以文件的形式保存,可以選擇用flume定時同步
- 可以用spark streaming或者Flink來實時接入
- kafka也OK
- 消息隊列:即來自ActiveMQ、Kafka的數據等。
二、DWD層
數據倉庫的DWD層(Data Warehouse Detail Layer)是整個數據倉庫架構中的核心層次,也是數據倉庫的基礎層,它主要用于存儲處理過的數據。
DWD層是對原始數據進行清洗、整合、標準化和去重等處理,將數據轉化為面向主題的數據集。在DWD層,數據會被按照主題進行建模,即按照不同的業務領域或業務流程進行分類和組織。這種建模方法被稱為主題建模,它是數據倉庫架構的核心特點之一。
DWD層的主要任務是將原始數據轉換成具有較高質量和較高復用性的數據集,使得數據在后續的處理和分析過程中更加容易理解和使用。DWD層的數據一般不包括計算和匯總的結果,而是以最原始的形式存儲,這樣可以保證數據的完整性和準確性,并支持更靈活的分析和查詢操作。
DWD層的數據模型通常以星型模型或雪花模型為主,其中,星型模型包括一個中心的事實表和多個維度表,每個維度表代表一個業務維度,包含相關的屬性和描述信息,事實表則包含與這些業務維度相關的度量值;而雪花模型則是在星型模型的基礎上,對一些維度表進行進一步的規范化,使得數據更加清晰和精細。
DWD層的數據來源包括多個數據源,例如傳感器、設備、應用程序、數據采集系統等等。在ETL過程中,數據會經過多次轉換和清洗操作,以保證數據的質量和完整性,例如數據清洗、數據標準化、數據合并、數據分割、數據重構等等。
DWD層是數據倉庫架構中最重要的層次之一,它將原始數據轉化為具有高質量和高復用性的數據集,為數據分析、查詢和應用提供了強有力的支持。
該層是業務層和數據倉庫的隔離層,保持和ODS層一樣的數據顆粒度;主要是對ODS數據層做一些數據的清洗和規范化的操作,比如去除空數據、臟數據、離群值等。
為了提高數據明細層的易用性,該層通常會才采用一些維度退化方法,將維度退化至事實表中,減少事實表和維表的關聯。
數據中間層DWM(可選)
數據中間層:Data Warehouse Middle,DWM
該層是在DWD層的數據基礎上,對數據做一些輕微的聚合操作,生成一些列的中間結果表,提升公共指標的復用性,減少重復加工的工作。
簡單來說,就是對通用的核心維度進行聚合操作,算出相應的統計指標,例如計算出統計指標:用戶訪問的次數,時長等
三、DWS層
數據倉庫的DWS層(Data Warehouse Service Layer)是數據倉庫架構中的一層,它是在DWD層的基礎上進一步處理數據,提供更加靈活、高效、可擴展的數據查詢和分析服務。
DWS層的主要任務是對DWD層的數據進行加工、聚合、計算和匯總,以滿足各種業務需求和分析場景。在DWS層,數據模型以業務應用為中心,根據業務流程和業務需求進行建模,以支持各種復雜的查詢和分析操作。
與DWD層相比,DWS層的數據模型更加靈活和多樣化,可以采用星型模型、雪花模型、多維模型、標簽模型等多種建模方式,以滿足各種業務需求和分析場景。此外,DWS層的數據通常是預處理后的聚合數據,包括各種匯總指標、計算結果、模型輸出等等,以支持更快速、高效的查詢和分析操作。
該層是基于DWM上的基礎數據,整合匯總成分析某一個主題域的數據服務層,一般是寬表,用于提供后續的業務查詢,OLAP分析,數據分發等。
一般來說,該層的數據表會相對較少;一張表會涵蓋比較多的業務內容,由于其字段較多,因此一般也會稱該層的表為寬表。
- 用戶行為,輕度聚合DWD
- 主要對ODS/DWD層數據做一些輕度的匯總。
DWS層的數據處理主要包括以下幾個方面:
1.數據加工和清洗:對DWD層的數據進行進一步加工和清洗,包括數據清洗、數據轉換、數據格式化、數據歸一化等,以確保數據質量和準確性。
2.數據聚合和計算:對DWD層的數據進行聚合和計算,生成各種匯總指標、計算結果和模型輸出,以支持各種業務分析和決策需求。
3.數據存儲和管理:將處理后的數據存儲到DWS層的數據庫中,并進行管理和維護,以確保數據的安全性、可靠性和可用性。
4.數據訪問和服務:提供各種數據查詢和分析服務,包括OLAP分析、數據挖掘、報表生成、可視化等,以支持各種業務需求和決策場景。
DWS層是數據倉庫架構中重要的一層,它為業務分析和決策提供了強有力的支持,能夠提供高效、靈活、可擴展的數據查詢和分析服務,為企業的業務決策提供有力的支撐。
四、ADS層
ADS層(Application Data Service Layer)是數據倉庫中的最上層,它是基于DWS層數據進行二次加工和業務應用開發的層級。ADS層通常是面向特定的業務場景和業務需求進行建模和開發,提供各種業務分析、報表、可視化和決策支持等服務。
數據應用層, 也有公司把這層叫做APP層、DAL(DATA ACCESS LAYER)層、DM層,DF層,叫法繁多。
面向實際的數據需求,以DWD或者DWS層的數據為基礎,組成的各種統計報表。
統計結果最終同步到RDS以供BI或應用系統查詢使用。
ADS層的主要任務是將DWS層的數據進行業務化加工和轉換,以生成各種針對具體業務需求的洞察和分析結果。此外,ADS層還負責提供各種業務應用和服務,包括數據可視化、報表生成、數據挖掘、預測建模、決策支持等,以支持企業的各種業務需求和決策場景。
該層主要是提供給數據產品和數據分析使用的數據,一般會存放在ES、Redis、PostgreSql等系統中供線上系統使用;也可能存放在hive或者Druid中,供數據分析和數據挖掘使用,比如常用的數據報表就是存在這里的。
與DWS層相比,ADS層的數據模型更加業務化和定制化,通常是基于具體的業務場景和業務需求進行建模和開發,以支持各種復雜的分析和決策操作。在ADS層,數據通常是以應用為中心進行組織和管理,以支持各種復雜的業務場景和分析需求。
ADS層的數據處理主要包括以下幾個方面:
1.數據加工和轉換:將DWS層的數據進行業務化加工和轉換,包括數據清洗、數據抽取、數據加工、數據集成、數據轉換等,以滿足具體的業務需求和場景。
2.數據建模和開發:基于具體業務需求進行數據建模和開發,包括模型設計、數據架構、應用開發、服務開發等,以支持各種業務分析和決策需求。
3.數據存儲和管理:將處理后的數據存儲到ADS層的數據庫中,并進行管理和維護,以確保數據的安全性、可靠性和可用性。
4.數據分析和服務:提供各種數據分析和服務,包括OLAP分析、數據挖掘、報表生成、可視化等,以支持各種業務需求和決策場景。
ADS層是數據倉庫架構中最上層的一層,它是數據倉庫的最終輸出,能夠提供針對具體業務場景和業務需求的各種分析和決策支持。ADS層通過二次加工和業務應用開發,將數據轉化為有價值的信息和智能洞察,為企業的業務決策提供有力的支持。
五、DIM層
在數據倉庫中,DIM(Dimension)層通常用于存儲業務維度信息。維度是指一組具有共同特征的屬性,用于描述事實數據。例如,在銷售業務中,產品、客戶、時間等都可以作為維度來描述銷售情況。
在數據倉庫中,DIM層通常包含一系列維度表,每個維度表包含了該維度的詳細信息。維度表通常包含兩種類型的字段:描述性字段和層次字段。描述性字段包含了該維度的詳細信息,如名稱、描述、編碼等;層次字段則用于描述該維度的層次結構,例如時間維度可以按照年、月、日等不同的層次進行劃分,產品維度可以按照品類、品牌、型號等不同的層次進行劃分。
維度表(Dimension Table)或維表,有時也稱查找表(Lookup Table),是與事實表相對應的一種表;它保存了維度的屬性值,可以跟事實表做關聯,相當于將事實表上經常重復出現的屬性抽取、規范出來用一張表進行管理。維度表主要是包含兩個部分:
- 高基數維度數據:一般是用戶資料表、商品資料表類似的資料表,數據量可能是千萬級或者上億級別
- 低基數維度數據:一般是配置表,比如枚舉字段對應的中文含義,或者日期維表等;數據量可能就是個位數或者幾千幾萬。
維度表通常采用基于主題建模的模型,如星型模型或雪花模型。在星型模型中,維度表位于中心的星型結構中,與事實表通過外鍵關聯;在雪花模型中,維度表與星型模型類似,但是維度表中的層次字段通常被拆分成多個表,形成類似于雪花的結構。
在數據倉庫中,維度表的設計需要考慮以下幾個方面:
1、數據的準確性:維度表中的數據應該準確、完整、一致。通常可以通過數據清洗、校驗等方式來確保數據的質量。
2、數據的可擴展性:維度表應該具有可擴展性,能夠支持快速地添加新的維度和層次。
3、數據的性能:維度表應該具有良好的查詢性能,通常可以采用列式存儲、分區、索引等方式來優化查詢性能。
4、數據的易用性:維度表中的字段應該易于使用和理解,通常可以通過命名規范、字段注釋等方式來提高數據的易用性。
DIM層在數據倉庫中扮演著非常重要的角色,是實現數據分析和BI報表的關鍵。通過合理的維度設計和維度表建模,可以為數據分析提供更加準確、全面、可靠的基礎數據。
事實表 Fact Table
事實表是指存儲有事實記錄的表,比如系統日志、銷售記錄等。事實表的記錄在不斷地增長,比如電商的商品訂單表,就是類似的情況,所以事實表的體積通常是遠大于其他表。
臨時表TMP
每一層的計算都會有很多臨時表,專設一個DWTMP層來存儲我們數據倉庫的臨時表
總結
1. ODS(Operational Data Store,操作型數據存儲)?
ODS層是數據倉庫體系結構的最底層,主要用于存儲從各個操作系統采集來的原始數據。它作為數據倉庫的臨時區域,經過ETL(抽取、轉換、加載)過程后,將數據源中的數據抽取、洗凈并傳輸到ODS層。ODS層的主要功能是為后續的數據倉庫層(如DWD層)提供原始數據,同時減少對業務系統的影響。
2. DWD(Data Warehouse Detail,數據倉庫明細層)
DWD層是數據倉庫的明細層,用于存儲詳細、完整的數據。它支持企業數據的跨部門和跨系統共享和查詢,是數據倉庫中數據加工和清洗的重要環節。DWD層的數據通常已經過結構化處理,便于后續的匯總和分析。
3. DWS(Data Warehouse Summary,數據倉庫匯總層)
DWS層是數據倉庫的匯總層,用于提供業務匯總分析服務。它對原始數據進行聚合計算和加工,生成匯總數據,供企業決策層使用。DWS層的數據通常是對DWD層數據的進一步加工,便于快速查詢和分析。
4. ADS(Application Data Service,應用數據服務)
ADS層是數據倉庫的應用數據服務層,用于存放數據產品個性化的統計指標數據和報表數據。它是數據倉庫的最上層,直接面向業務應用,提供定制化的數據服務,支持企業的決策和業務分析。
ODS、DWD、DWS、ADS是數據倉庫分層架構中的關鍵層次,每一層都有其特定的功能和職責。通過這種分層設計,數據倉庫能夠實現數據的清晰管理、復雜問題的簡化、統一數據口徑以及減少重復開發,從而提高數據查詢效率,降低成本和復雜度。