你的數據倉庫既要有「維度模型設計」也要看「分層架構」

2020-12-12 上海大數據SHData

維度模型設計和分層架構都是數據倉庫必不可缺的。維度建模以分析決策的需求出發構建模型,構建的數據模型為分析需求服務,因此它重點解決用戶如何更快速完成分析需求,同時還有較好的大規模複雜查詢的響應性能。而分層架構的設計的主要是為在管理數據的時候,能對數據有一個更加清晰的掌控。這篇乾貨將帶你認清數據倉庫「維度模型設計」與「分層架構」。

數據倉庫緯度模型設計

基本概念

維度模型是數據倉庫領域大師Ralph Kimall所倡導,它的《數據倉庫工具箱》,是數據倉庫工程領域最流行的數倉建模經典。它重點解決用戶如何更快速完成分析需求,同時還有較好的大規模複雜查詢的響應性能。

維度建模是專門應用於分析型資料庫、數據倉庫、數據集市建模的方法。數據集市可以理解為是一種"小型數據倉庫"。

事實表

發生在現實世界中的操作性事件,其所產生的可度量數值,存儲在事實表中。從最低的粒度級別來看,事實表行對應一個度量事件,反之亦然。

事實表表示對分析主題的度量。比如一次購買行為我們就可以理解為是一個事實。

圖中的訂單表就是一個事實表,可以理解它就是在現實中發生的一次操作型事件,每完成一個訂單,就會在訂單中增加一條記錄。

事實表的特徵:表裡沒有存放實際的內容,他是一堆主鍵的集合,這些ID分別能對應到維度表中的一條記錄。事實表包含了與各維度表相關聯的外鍵,可與維度表關聯。事實表的度量通常是數值類型(條/個/次),且記錄數會不斷增加,表數據規模迅速增長。

維度表

維度表示要對數據進行分析時所用的一個量,比如你要分析產品銷售情況,你可以選擇按類別進行分析,或按區域分析。這樣的按…分析就構成一個維度。上圖中的用戶表、商家表、時間表這些都屬於維度表。這些表都有一個唯一的主鍵,然後在表中存放了詳細的數據信息。

例如:交易金額分析分析

男性用戶的訂單金額、聯想商品的訂單金額、第一季度的訂單金額、手機的訂單金額、家裡下單的訂單金額。

例如:學生分析

姓張的同學有多少、男性的同學有多少、江蘇的同學有多少、身高小於170cm的同學有多少、年齡小於23歲的同學有多少。

維度表的特徵:每個維度表都包含單一的主鍵列。維度表的主鍵可以作為與之關聯的任何事實表的外鍵,當然,維度表行的描述環境應與事實表行完全對應。維度表通常比較寬,是扁平型非規範表,包含大量的低粒度的文本屬性。

總的說來,在數據倉庫中不需要嚴格遵守規範化設計原則。因為數據倉庫的主導功能就是面向分析,以查詢為主,不涉及數據更新操作。

需要強調的是:

事實表的設計是以能夠正確記錄歷史信息為準則。維度表的設計是以能夠以合適的角度來聚合主題內容為準則。維度建模三種模式

星形模型

星形模式(Star Schema)是最常用的維度建模方式。星型模式是以事實表為中心,所有的維度表直接連接在事實表上,像星星一樣。

星形模式的維度建模由一個事實表和一組維度表成,且具有以下特點:

維表只和事實表關聯,維表之間沒有關聯;每個維表主鍵為單列,且該主鍵放置在事實表中,作為兩邊連接的外鍵;以事實表為核心,維度表圍繞核心呈星形分布;

雪花模式

雪花模式(Snowflake Schema)是對星形模式的擴展。雪花模式的維度表可以擁有其他維度表的,雖然這種模型相比星型更規範一些,但是由於這種模型不太容易理解,維護成本比較高,而且性能方面需要關聯多層維表,性能也比星型模型要低。所以一般不是很常用。

星座模式

星座模式是星型模式延伸而來,星型模式是基於一張事實表的,而星座模式是基於多張事實表的,而且共享維度信息。

前面介紹的兩種維度建模方法都是多維表對應單事實表,但在很多時候維度空間內的事實表不止一個,而一個維表也可能被多個事實表用到。在業務發展後期,絕大部分維度建模都採用的是星座模式。

數據倉庫分層架構

分層的意義

分層的主要原因是在管理數據的時候,能對數據有一個更加清晰的掌控,詳細來講,主要有下面幾個原因:

清晰數據結構:

每一個數據分層都有它的作用域,這樣我們在使用表的時候能更方便地定位和理解。

方便數據血緣追蹤:

簡單來說,我們最終給業務呈現的是一個能直接使用業務表,但是它的來源有很多,如果有一張來源表出問題了,我們希望能夠快速準確地定位到問題,並清楚它的危害範圍。

減少重複開發:

規範數據分層,開發一些通用的中間層數據,能夠減少極大的重複計算。

把複雜問題簡單化:

將一個複雜的任務分解成多個步驟來完成,每一層只處理單一的步驟,比較簡單和容易理解。而且便於維護數據的準確性,當數據出現問題之後,可以不用修復所有的數據,只需要從有問題的步驟開始修復。

屏蔽原始數據的異常:

屏蔽業務的影響,不必改一次業務就需要重新接入數據。

數倉分層思想

數據分層,每個企業根據自己的業務需求可以分成不同的層次,但是最基礎的分層思想,理論上數據分為三個層,數據運營層、數據倉庫層、數據服務層。基於這個基礎分層之上添加新的層次,來滿足不同的業務需求。

數據運營層(ODS)

Operatedata store(操作數據-存儲),是最接近數據源中數據的一層,數據源中的數據,經過抽取、洗淨、傳輸,也就說傳說中的ETL之後,裝入ODS層。本層的數據,總體上大多是按照源頭業務系統的分類方式而分類的。

例如:MySQL裡面的一張表可以通過sqoop之間抽取到ODS層。

ODS層數據的來源方式:

業務庫經常會使用sqoop來抽取,比如我們每天定時抽取一次。在實時方面,可以考慮用canal監聽mysql的binlog,實時接入即可。

埋點日誌線上系統會打入各種日誌,這些日誌一般以文件的形式保存,我們可以選擇用flume定時抽取,也可以用用spark streaming或者Flink來實時接入,當然,kafka也會是一個關鍵的角色。

消息隊列來自ActiveMQ、Kafka的數據等。

數據倉庫層(DW)

Datawarehouse(數據倉庫)。在這裡,從ODS層中獲得的數據按照主題建立各種數據模型。例如以研究人的旅遊消費為主題的數據集中,便可以結合航空公司的登機出行信息,以及銀聯繫統的刷卡記錄,進行結合分析,產生數據集。在這裡,我們需要了解四個概念:維(dimension)、事實(Fact)、指標(Index)和粒度( Granularity)。

DW數據分層,由下到上為 DWD,DWB,DWS:

DWD:data warehouse detail細節數據層,是業務層與數據倉庫的隔離層。DWB:data warehouse base 基礎數據層,存儲的是客觀數據,一般用作中間層,可以認為是大量指標的數據層。DWS:data warehouseservice 服務數據層,基於DWB上的基礎數據,整合匯總層分析某一個主題域的服務數據,一般是寬表。 數據服務層/應用層(ADS)

ApplicationData Service(應用數據服務)。該層主要是提供數據產品和數據分析使用的數據,一般會存放在ES、MySQL等系統中供線上系統使用。

例如:我們經常說的報表數據,或者說那種大寬表,一般就放在這裡。

這就是經典的數據倉庫分層架構,大家不妨去瞧一瞧各大平臺的數據倉庫產品,他們的數據倉庫架構圖都至少包含這些分層。

原文連結:https://blog.csdn.net/weixin_44318830/article/details/105956712

文章部分素材來源:CSDN

相關焦點

  • 數據倉庫系統架構和數倉分層體系介紹
    一、數據倉庫體系架構 公司藉助的第三方數據平臺,在此平臺之上建設數據倉庫。因為第三方平臺集成了很多東西,所以省去了不少功夫。 數據倉庫的體系架構,無外乎就是數據源、數據採集方式、計算存儲系統、數據應用層,這幾個方面。
  • 數據倉庫模型設計與工具
    數據模型對於數倉是最核心的東西,數據模型是數據組織和存儲方法,模型的好壞,決定了數倉能支撐企業業務多久。為什麼大多數企業,數倉都要重建,這不僅僅是業務拓展、發展迅速,很大一部分是因為模型建的很爛。
  • 數據倉庫入門,看這一篇文章就夠了
    今天跟著我來學學數據倉庫的基礎知識,通過本文的閱讀,你將獲得以下方面的認知:什麼是數倉數倉的核心概念數倉的分層架構數據倉庫概述數據倉庫,顧名思義對於數據倉庫來說,分區歸類就類似於數據倉庫的基礎架構,數據倉庫的數據存儲結構(如表)就是倉庫的貨架,而商品則是對應數據倉庫實際存儲的各種數據。無論是什麼樣的倉庫,無論倉庫大小,其目的都是為了實現物品的集中管理、有序存取,數據倉庫也是一樣,它管理存儲的是數據以及數據結構。
  • 如何設計一個規範的數據倉庫
    二.數據倉庫分層有哪些常見的數據倉庫分為ODS操作數據存儲層、DW數據倉庫層和DM數據集市層三層,其中DW層又分為DWD層和DWS層。數據倉庫分層結構見下圖:2.1 ODS層ODS層中的數據全部來自於業務資料庫,ODS層的表格也業務資料庫中的表格一一對應,就是將業務資料庫中的表格在數據倉庫的底層重新建立一次,數據與結構完全一致。由於業務資料庫(OLTP)基本按照ER實體模型建模,因此ODS層中的建模方式也是ER實體模型。
  • 馬蜂窩數據中臺起步建設:數倉的架構、模型與應用
    一、馬蜂窩數據倉庫與數據中臺最近幾年,數據中臺概念的熱度一直不減。2018 年起,馬蜂窩也開始了自己的數據中臺探索之路。數據中臺到底是什麼?要不要建?和數據倉庫有什麼本質的區別?相信很多企業都在關注這些問題。
  • 大數據篇:一文讀懂@數據倉庫
    因此,從產業界的角度看,數據倉庫建設是一個工程,是一個過程數據倉庫內的數據時限一般在5-10年以上,甚至永不刪除,這些數據的鍵碼都包含時間項,標明數據的歷史時期,方便做時間趨勢分析。首先是數據的應用問題,無論是數據倉庫還是大數據平臺,裡面包含了接口層數據、存儲層數據、輕度匯總層、重度匯總層、模型層數據、報表層數據等等,各種各樣的表有成千上萬,這些表有的是中間處理過程,有些是一次性的報表,不同表之間的數據一致性和口徑也會不同,而且不同的表不同的欄位對數據安全要求級別也不同。
  • 數據研發同學,如何設計企業數據倉庫?
    這兩種數倉雖然從技術實現上有一定差異,但是整體模型構建上,卻有很多的相似點。離線數據倉庫設計離線數據倉庫的設計,主要分為三層結構,ODS層(原始數據層),DWD層(公共明細層)和DWS(公共匯總層),APP層(業務數據應用層)。
  • 傳統行業如何建立數據倉庫?
    所以在需求討論的基礎上,需要理解業務工作流程,當然如果你已經具備了這個行業豐富的業務知識,那可以在需求調研的時候儘可能地讓對方按照自己的思路去完成數據倉庫系統的功能設計。3、需求方群體的分類,BI項目最終的使用對象可以分為以下幾類:數據查詢者、報表查詢者、企業決策者
  • 優化代碼-Web服務分層設計概念與參考模型
    代碼不僅僅是給機器執行的,更是給人看的。我們都希望自己的代碼寫的好看猶如你的外表,但面對複雜業務需求和多人協同時,如果沒有一套基本的原則規範,很難確保不迷失方向。本文就如何寫好代碼的問題,試圖整理出一套規範。什麼是分層設計簡單的理解就是,把系統的邏輯功能按照某些原則抽象出幾個層次,層次內保持高類聚,層次間保持低耦合,整個系統達到概念清晰,邊界清晰,最終功能穩定。
  • 關於數據倉庫建設,了解這7點就夠了
    決定你的報表和BI到底能不能實時展現數據。01 數據倉庫的發展趨勢1.1 數據倉庫的趨勢關於數據倉庫的概念就不多介紹了。實時數倉分層:為更好的統一管理數據,實時數倉可採用離線數倉的數據模型進行分層處理,可以分為實時明細層寫入druid等查詢效率高的存儲方便下遊使用;輕度匯總層對數據進行匯總分析後供下遊使用。數據流轉方案:實時數倉的數據來源可以為kafka消息隊列,這樣可以做到隊列中的數據即可以寫入數據湖用於批量分析,也可以實時處理,下遊可以寫入數據集市供業務使。
  • 架構設計:企業總體架構要如何做?小白也能快速領悟的設計思想
    一個應用架構設計的形成不單單是技術上,是統籌性的輸出,一般分為:功能清單,用例及活動圖,領域圖,接口設計,分層設計,業務代碼,其他設計。以上7種模型的設計主要還是集中在資源權限的設計上,也就是我們最常見的菜單級別的設計,這一塊的設計對於整個系統來說是最重要也是最基礎的存在,是後面我們要進行接口權限,數據權限權限的根基。
  • 大數據常見面試題之數據倉庫
    二、數倉分層一般情況下,將數據模型分為3層:1.源數據層ODS存放的是接入的原始數據經過ETL之後裝入本層,大多是按照源頭業務系統的分類方式而分類的.為了考慮後續可能追溯數據,因此對這一層不建議做過多的數據清洗工作,原封不動接入元數據即可,至於數據的去噪,去重,異常處理等過程可以放在後面的DW層2.數據倉庫層DW重點設計的數據倉庫中間層數據,在這裡ODS層獲得的數據按照主題建立各種數據模型
  • 網際網路公司的架構設計要怎麼落地?| 技術頭條
    作者 | 張輝清責編 | 胡巍巍你做架構設計了嗎?你認為要不要做架構設計?你的公司有沒有做架構設計?網際網路公司的架構設計又要怎麼做?架構設計會改變編碼方式,在架構設計階段如果做好了領域模型,你就可以在編碼施工階段,先寫業務邏輯層再寫數據訪問層。先定義好業務服務和數據接口定義,再根據數據定義來實現數據訪問。這與表驅動的傳統方式有所不同。先寫數據層再寫業務邏輯層,是先寫好數據表的增刪改查,然後業務邏輯層只是簡單地調用一下數據層,便提供給界面層使用。
  • 阿里巴巴數據專家乾貨|數據中臺模型設計系列(一):維度建模初探
    但是因為它是針對某一特定的意圖(例如滿足交易業務),它不需要承諾與其他業務系統共享公共數據。因此就出現了適合於企業中交叉應用的ERP、主數據系統。當然對於有建設業務中臺的企業來說,基於微服務架構的各個服務中心,能更好的提供可復用統一的公共數據。不管是面向業務的業務系統、經過數據統一後的主數據系統或者基於微服務架構的服務中心的數據,都是作為數據中臺的數據輸入源頭。
  • 面向CRM系統的數據倉庫的設計與實現
    在客戶信息數據倉庫模型中,分3步來進行設計,分劇是概念模型、邏輯模型和物理模型設計。本文針對某網上書店,以客戶購買主題為例,給出該客戶信息數據倉庫模型的完整的設計方案。  2.1 概念模型設計  數據倉庫設計中概念模型設計的目的是確定面向主題的信息包圍。
  • 【原創】-數據倉庫的由來?
    三、功能點側重資料庫是面向事務的設計 它只要保證數據能完整的存儲,實現引用的完整性。而數據倉庫則是面向主題設計的,將數據進行集成處理,反應歷史變化的數據集合,用於決策支持系統。
  • 數據湖 VS 數據倉庫之爭?阿里提出大數據架構新概念:湖倉一體
    阿里巴巴雙十一單日處理數據量增長 1.2 從大數據技術發展看湖和倉首先,數據倉庫的概念出現的要比數據湖早的多,可以追溯到資料庫為王的上世紀 90 年代。因此,我們有必要從歷史的脈絡來梳理這些名詞出現的大概時間、來由以及更重要的背後原因。
  • 網站數據分析:數據倉庫相關的問題(三)
    基本上,構建統一的企業級數據倉庫的方向是一致的,而Inmon偏向於從底層的數據集成出發,而Kimball則趨向於從上層的需求角度出發,這可能跟兩者從事的項目和所處的位置有關。  有了上面這段高質量的概括,第一個問題——你更偏向於以何種方式搭建數據倉庫(BOTTOM-UP or TOP-DOWN),分別有什麼優劣勢?
  • 從分而治之的思想到架構的設計
    這需要看我們當前對業務的理解程度。隔離級別越大,說明打通隔離越困難,修改調整越困難,但同時也意味著設計的架構越容易被遵守。因此當你堅信架構劃分正確,不同部分需要儘可能分割時,可以採用基於進程甚至更高級別的隔離。
  • 帶你全面認識企業分層網絡設計和模型
    【51CTO.com 獨家譯稿】在構建滿足中小型企業需要的LAN時,如果使用分層設計模型,你的計劃更有可能成功,與其它網絡設計模型相比,分層網絡更易於管理和擴展,解決問題的速度也更快。分層網絡設計需要將網絡劃分成不連續的層,每一層提供特定的功能,與它在整個網絡中的角色對應。