當我們說數據倉庫,究竟在說什麼?

java旭陽 發佈 2022-12-13T06:24:18.043944+00:00

前言無論你是否專門從事大數據開發,作為一個開發人員,應該都聽說過數據倉庫的概念,那你知道為什麼會出現數據倉庫?數據倉庫究竟是幹嘛的嗎?有什麼價值和意義呢?那麼本文就帶到入門,揭開數據倉庫的面紗。數據倉庫的由來數據倉庫為何而來,主要解決什麼問題的?

前言

無論你是否專門從事大數據開發,作為一個開發人員,應該都聽說過數據倉庫的概念,那你知道為什麼會出現數據倉庫?數據倉庫究竟是幹嘛的嗎?有什麼價值和意義呢?那麼本文就帶到入門,揭開數據倉庫的面紗。

數據倉庫的由來

數據倉庫為何而來,主要解決什麼問題的?

先下結論:為了分析數據而來,分析結果為企業決策提供支撐。舉個簡單的例子,比如你們公司要要判斷明年是否要進入生產口罩,那麼就需要數據支撐,比如口罩市場的需求、飽和率、利潤等等,然後藉由分析結果,去做判斷決策,而不是拍腦袋,不然大概率就是虧本的。

下面再以一個中國人壽保險公司發展為例,詳細闡述數據倉庫為何而來?

(1)OLTP系統處理業務數據

中國人壽保險(集團)公司下轄多條業務線,包括:人壽險、財險、車險,養老險等。各業務線的業務正常運營需要記錄維護包括客戶、保單、收付費、核保、理賠等信息。這麼多業務數據存儲在哪裡呢?

這些通用的業務行為一般是發在聯機事務處理系統(OLTP), 其主要任務是執行聯機事務處理,前台接收的用戶數據可以立即傳送到後台進行處理,並在很短的時間內給出處理結果。

通常來說,這些業務數據最終都是落在關係型資料庫中的,關係型資料庫(RDBMS)是OLTP典型應用,比如:Oracle、MySQL、SQL Server等

這只是最基礎的業務,但是隨著業務規模的不斷發展,衍生出了更多的數據分析型需求,用OLTP可行嗎?

(2)分析型決策需求衍生

隨著集團業務的持續運營,業務數據將會越來越多。由此也產生出許多運營相關的需求問題:

  • 能夠確定哪些險種正在惡化或已成為不良險種?
  • 能夠用有效的方式制定新增和續保的政策嗎?
  • 理賠過程有欺詐的可能嗎?
  • 現在得到的報表是否只是某條業務線的?集團整體層面數據如何?

......

為了能夠正確認識這些問題,制定相關的解決措施,瞎拍桌子是肯定不行的。最穩妥辦法就是:基於業務數據開展數據分析,基於分析的結果給決策提供支撐。也就是所謂的數據驅動決策的制定。

OLTP環境開展分析可行嗎?

可以,但是沒必要。OLTP系統的核心是面向業務,支持業務,支持事務。所有的業務操作可以分為讀、寫兩種操作,一般來說讀的壓力明顯大於寫的壓力。如果在OLTP環境直接開展各種分析,有以下問題需要考慮:

  • 數據分析也是對數據進行讀取操作,會讓讀取壓力倍增;
  • OLTP僅存儲數周或數月的數據;
  • 數據分散在不同系統不同表中,欄位類型屬性不統一;

(3)數據倉庫面世

當分析所涉及數據規模較小的時候,在業務低峰期時可以在OLTP系統上開展直接分析。但為了更好的進行各種規模的數據分析,同時也不影響OLTP系統運行,此時需要構建一個集成統一的數據分析平台。該平台的目的很簡單:面向分析,支持分析,並且和OLTP系統解耦合。基於這種需求,數據倉庫的雛形開始在企業中出現了。

數據倉庫是一個用於存儲、分析、報告的數據系統,目的是構建面向分析的集成化數據環境。我們把這種面向分析、支持分析的系統稱之為OLAP(聯機分析處理)系統。當然,數據倉庫是OLAP系統的一種實現。

  • 中國人壽保險公司就可以基於分析決策需求,構建數倉平台。

數據倉庫介紹

數據倉庫(英語:Data Warehouse,簡稱數倉、DW),是一個用於存儲、分析、報告的數據系統,主要目的是構建面向分析的集成化數據環境,分析結果為企業提供決策支持(Decision Support)。

  • 數據倉庫本身並不「生產」任何數據,其數據來源於不同外部系統;
  • 同時數據倉庫自身也不需要「消費」任何的數據,其結果開放給各個外部應用使用;
  • 這也是為什麼叫「倉庫」,而不叫「工廠」的原因。

數倉四大特徵

那麼數據倉庫都有什麼特點呢?

  1. 面向主題性(Subject-Oriented)
  • 主題是一個抽象的概念,是較高層次上企業信息系統中的數據綜合、歸類並進行分析利用的抽象。在邏輯意義上,它是對應企業中某一宏觀分析領域所涉及的分析對象。
  • 傳統OLTP系統對數據的劃分並不適用於決策分析。而基於主題組織的數據則不同,它們被劃分為各自獨立的領域,每個領域有各自的邏輯內涵但互不交叉,在抽象層次上對數據進行完整、一致和準確的描述。
  1. 集成性

主題相關的數據通常會分布在多個操作型系統中,彼此分散、獨立、異構。

  • 因此在數據進入數據倉庫之前,必然要經過統一與綜合,對數據進行抽取、清理、轉換和匯總,這一步是數據倉庫建設中最關鍵、最複雜的一步,所要完成的工作有:
  • 要統一源數據中所有矛盾之處。如欄位的同名異義、異名同義、單位不統一、字長不一致等等。
  • 進行數據綜合和計算。數據倉庫中的數據綜合工作可以在從原有資料庫抽取數據時生成,但許多是在數據倉庫內部生成的,即進入數據倉庫以後進行綜合生成的。

下圖說明了保險公司綜合數據的簡單處理過程,其中數據倉庫中與「承保」主題有關的數據來自於多個不同的操作型系統。

  1. 非易失性、非異變性
  • 數據倉庫是分析數據的平台,而不是創造數據的平台。我們是通過數倉去分析數據中的規律,而不是去創造修改其中的規律。因此數據進入數據倉庫後,它便穩定且不會改變。
  • 數據倉庫的數據反映的是一段相當長的時間內歷史數據的內容,數據倉庫的用戶對數據的操作大多是數據查詢或比較複雜的挖掘,一旦數據進入數據倉庫以後,一般情況下被較長時間保留。
  • 數據倉庫中一般有大量的查詢操作,但修改和刪除操作很少。
  1. 時變性
  • 數據倉庫包含各種粒度的歷史數據,數據可能與某個特定日期、星期、月份、季度或者年份有關。
  • 當業務變化後會失去時效性。因此數據倉庫的數據需要隨著時間更新,以適應決策的需要。
  • 從這個角度講,數據倉庫建設是一個項目,更是一個過程 。

數據倉庫架構

通常情況下,為了把一個複雜的工作拆成了多個簡單的工作,一般將數據倉庫架構分為三層,即數據操作層、數據倉庫層和應用數據層(數據集市層)。

  1. ODS(Operation Data Store 數據準備區)

數據倉庫源頭系統的數據表通常會原封不動的存儲一份,這稱為ODS層,也稱為準備區。它們是後續數據倉庫層加工數據的來源。ODS層數據的主要來源是業務資料庫、埋點日誌、其他數據源。

  • 業務資料庫:可使用DataX、Sqoop等工具來抽取,每天定時抽取一次;在實時應用中,可用Canal監聽MySQL的 Binlog,實時接入變更的數據。
  • 埋點日誌:線上系統會打入各種日誌,這些日誌一般以文件的形式保存,可以用 Flume 定時抽取。
  • 其他數據源:從第三方購買的數據、或是網絡爬蟲抓取的數據。
  1. DW(Data Warehouse 數據倉庫層)

該層包含DWD、DWS、DIM層,由ODS層數據加工而成,主要是完成數據加工與整合,建立一致性的維度,構建可復用的面向分析和統計的明細事實表,以及匯總公共粒度的指標。

  • DWD(Data Warehouse Detail 細節數據層),是業務層與數據倉庫的隔離層。以業務過程作為建模驅動,基於每個具體的業務過程特點,構建細粒度的明細層事實表。可以結合企業的數據使用特點,將明細事實表的某些重要維度屬性欄位做適當冗餘,也即寬表化處理。
  • DWS(Data Warehouse Service 服務數據層),基於DWD的基礎數據,整合匯總成分析某一個主題域的服務數據。以分析的主題為建模驅動,基於上層的應用和產品的指標需求,構建公共粒度的匯總指標事實表。
  • DIM(公共維度層 ),基於維度建模理念思想,建立一致性維度。
  • TMP層 :臨時層,存放計算過程中臨時產生的數據。
  1. ADS(Application Data Store 應用數據層)

該層是基於DW層的數據,整合匯總成主題域的服務數據,用於提供後續的業務查詢等。

數據倉庫開發語言

數倉作為面向分析的數據平台,其主職工作就是對存儲在其中的數據開展分析,那麼如何讀取數據分析呢?

理論上來說,任何一款程式語言只要具備讀寫數據、處理數據的能力,都可以用於數倉的開發。比如大家耳熟能詳的C、java、Python等。但是這些編程一員的學習成本和開發效率都不是十分友好,在數據分析領域中,SQL語言功能很強,十分簡潔,用戶也容易學習和使用,是主流的語言。比如比較常用的數據倉庫工具Hive就是支持SQL的語法。

總結

本文通過例子講清楚了數據倉庫的來源,以及在企業應用中的必要性,主要是為了構建一個面向分析的集成化數據環境,分析結果可以為企業提供決策支持,真正實現數據驅動決策的目的。實際上數據倉庫的建設遠比上面提到的複雜,需要花費很大的成本,因此需要考慮清楚。

關鍵字: