一、數據倉庫體系架構
公司借助的第三方數據平臺,在此平臺之上建設數據倉庫。因為第三方平臺集成了很多東西,所以省去了不少功夫。
數據倉庫的體系架構,無外乎就是數據源、數據采集方式、計算存儲系統、數據應用層,這幾個方面。
1、數據源:
內部數據:如交易數據、會員數據,日志數據,由公司業務系統產生的數據。
外部數據:互聯網數據和第三方服務商數據等。互聯網數據就是我們使用爬蟲爬取的互聯網數據,而第三方數據,一般多指公司合作方產生的數據。
2、采集方式
離線采集,包括全量同步和增量同步。實時采集,顧名思義就是采用實時的策略采集數據,如我們想統計實時的交易數據。當產生一筆訂單存入業務庫時,我們可以通過Binlog等多種方式感知數據的變化,把新產生的數據同步的kafka其他消息隊列,實時的消費使用數據。
第三方采集,跟公司商務合作的其他公司,他們暴露接口給我們,我們通過接口取數據,當然這只是其中一種方式,不同公司取數據的策略是不一樣的。

數據倉庫的體系架構圖
3、存儲計算
通過集群的分布式計算能力和分布式文件系統,來計算和存儲數據。我們使用的阿里云服務,把業務數據存儲到hive中,然后劃分為不同的層級,來規劃整合數據。借助分布式文件系統可以存儲大數據量的數據,包括久遠之前的歷史數據。
4、數據應用
使用HQL、Mapreduce、SparkSql、UDF函數等多種處理方式,對各種業務數據進行處理,形成一定規范模式的數據。把這些建模成型的數據提供給外界使用。如BI應用、挖掘分析、算法模型、可視化大屏系統。
當然最重要的是對數據的管理,數據就是我們的資產,只有管理的有條不紊,使用起來才能得手應心。我們可以建立數據地圖、數據規范、數據質量系統,配置完整的任務調度(如Oozie)。
當然運維方面是必不可少的,如果一個任務失敗了,我們需要第一時間知道,這時就需要告警系統。另外還可以設置角色權限,整個系統有一個最高權限,還有開發權限,訪問權限等等,這個需要根據公司需求來做。
二、數據倉庫分層

數據倉庫分層
1、數據倉庫分層模式作用
1.1、數據結構化更清晰:對于不同層級的數據,他們作用域不相同,每一個數據分層都有它的作用域,這樣我們在使用表的時候能更方便地定位和理解。
1.2、數據血緣追蹤:提供給外界使用的是一張業務表,但是這張業務表可能來源很多張表。如果有一張來源表出問題了,我們可以快速準確的定位到問題,并清楚每張表的作用范圍。
1.3、減少重復開發:數據分層規范化,開發一些通用的中間層數據,能夠減少重復計算,提高單張業務表的使用率。
1.4、簡化復雜的問題:把一個復雜的業務分成多個步驟實現,每一層只處理單一的步驟,比較簡單和容易理解。而且便于維護數據的準確性,當數據出現問題之后,可以不用修復所有的數據,只需要從有問題的步驟開始修復。有點類似Spark RDD的容錯機制。
1.5、減少業務的影響:業務可能會經常變化,這樣做就不必改一次業務就需要重新接入數據。

2、數據倉庫分層介紹
2.1、ODS原始數據層
ODS層保存所有操作數據,不對原始數據做任何處理。在業務系統和數據倉庫之間形成一個隔離,源系統數據結構的變化不影響其他數據分層。減輕業務系統被反復抽取的壓力,由ODS統一進行抽取和分發。記住ODS層數據要保留數據的原始性。
處理原則:
根據源業務系統表的情況以增量或全量方式抽取數據;
ODS層以流水表和快照表為主,按日期對數據進行分區保存,不使用拉鏈表;
ODS層的數據不做清洗和轉換,數據的表結構和數據粒度與原業務系統保持一致。
2.2、DWD數據明細層
DWD層的數據是經由ODS層數據經過清洗、轉換后的明細數據,滿足對標準化數據需求。如對NULL值處理,對數據字典解析,對日期格式轉換,字段合并、臟數據處理等。
處理原則:
數據結構與ODS層一致,但可以對表結構進行裁剪和匯總等操作;
對數據做清洗、轉換;
DWD層的數據不一定要永久保存,具體保存周期視業務情況而定;
2.3、DWS數據匯總層
DWS層數據 按主題對數據進行抽象、歸類,提供業務系統細節數據的長期沉淀。這一層是一些匯總后的寬表,是根據DWD層數據按照各種維度或多種維度組合,把需要查詢的一些事實字段進行匯總統計。可以滿足一些特定查詢、數據挖掘應用,面向業務層面,根據需求進行匯總。
處理原則:
面向全局、數據整合;
存放最全的歷史數據,業務發生變化時易于擴展,適應復雜的實際業務情況;
盡量減少數據訪問時的計算量,優化表的關聯。維度建模,星形模型;
事實拉寬,度量預先計算, 基本都是快照表。反規范化,有數據冗余。
2.4、AWS數據明細層
ADS應用層是根據業務需要,由DWD、DWS數據統計而出的結果,可以直接提供查詢展現,或導入至Oracle等關系型數據庫中使用。這一層的數據會面向特定的業務部門,不同的業務部門使用不同的數據,支持數據挖掘。
處理原則:
形式各式,主要按不同的業務需求來處理;
保持數據量小,定時刷新數據;
數據同步到不同的關系型數據庫或hbase等其他數據庫中。
提供最終數據,來滿足業務人員、數據分析人員的數據需求。