程式設計師筆記|3個問題帶你入門資料建模
一、何為建模?
資料幾乎總是用於兩種目的: 操作型記錄的儲存 和 分析型決策的制定 。簡單來說,操作型系統儲存資料,分型型系統使用資料。
- 前者一般僅反映資料的最新狀態,按單條記錄事務性來處理;其優化的核心是更快地處理事務。
- 後者往往是反映資料一段時間的狀態變化,按大批量方式處理資料;其核心是高效能、多維度處理資料。
通常我們將操作型系統簡稱為OLTP(On-Line Transaction Processing)— 聯機事務處理,將分析型系統簡稱為OLAP(On-Line Analytical Processing)— 聯機分析處理。
針對這兩種不同的資料用途,如何組織資料,更好地滿足資料使用需求。這裡就涉及到資料建模問題。即設計一種資料組織方式(模型),來滿足不同場景。在OLTP場景中,常用的是使用實體關係模型(ER)來儲存,從而在事務處理中解決資料的冗餘和一致性問題。在OLAP場景中,有多種建模方式有:ER模型、星型模型和多維模型。下面分別說明下:
ER模型
OLAP中的ER模型,與OLTP中的有所區別。其本質差異是站在企業角度面向主題的抽象,而不是針對某個具體業務流程的實體物件關係的抽象。
星型模型
星型模型,是維度模型在關係型資料庫上的一種實現。該模型表示每個業務過程包含事實表,事實表儲存事件的數值化度量,圍繞事實表的多個維度表,維度表包含事件發生時實際存在的文字環境。這種類似於星狀的結構通常稱為"星型連線"。其重點關注使用者如何更快速地完成需求分析,同時具有較好的大規模複雜查詢的響應效能。在星型模型基礎上,在複雜場景下還可以進一步衍生出雪花模型。
多維模型
多維模型,是維度模型的另一種實現。當資料被載入到OLAP多維資料庫時,對這些資料的儲存的索引,採用了為維度資料涉及的格式和技術。效能聚集或預計算彙總表通常由多維資料庫引擎建立並管理。由於採用預計算、索引策略和其他優化方法,多維資料庫可實現高效能查詢。
在這三種方式中,星型模型使用較多,下面也著重對這種方式進行說明。
二、維度建模
1、基本概念
在建模過程中,涉及到很多概念。下面通過一個場景來,來說明它們。例如:常見的電商下單環節,每個使用者提交一筆訂單(僅限一個物品),就對應於一條訂單記錄。
【業務過程】:下訂單
【粒度】:每筆訂單(拆分為單個物品)
【維度】:地域、年齡、渠道等(可供分析的角度)
【事實/度量】:訂單金額等(可用於分析的資料)
2、建模步驟
收集業務需求與資料實現
在開始維度建模工作之前,需要理解業務需求,以及作為底層源資料的實際情況。通過與業務方溝通交流、檢視現有報表等來發現需求,用於理解他們的基於關鍵效能指標、競爭性商業問題、決策制定過程、支援分析需求的目標。同時,資料實際情況可通過與資料庫系統專家交流,瞭解訪問資料可行性等。
選擇業務過程
業務過程是組織完成的操作型活動。業務過程時間建立或獲取效能度量,並轉換為事實表中的事實。多數事實表關注某一業務過程的結果。過程的選擇非常重要的,因為過程定義了特定的設計目標以及對粒度、維度、事實的定義。
宣告粒度
宣告粒度是維度設計的重要步驟。粒度用於確定某一事實表中的行表示什麼。在選擇維度或事實前必須宣告粒度,因為每個候選維度或事實必須與定義的粒度保持一致。在從給定的業務過程獲取資料時,原子粒度是最低階別的粒度。強烈建議從關注原子級別粒度資料開始設計,因為原子粒度資料能夠承受無法預期的使用者查詢。
確認維度(描述環境)
維度提供圍繞某一業務過程事件所涉及的"誰、什麼、何處、何時、為什麼、如何"等背景。維度表包含分析應用所需要的用於過濾及分類事實的描述性屬性。牢牢掌握事實表的粒度,就能夠將所有可能存在的維度區分開來。
確認事實(用於度量)
事實,涉及來自業務過程事件的度量,基本上都是以資料值表示。一個事實錶行與按照事實表粒度描述的度量事件之間存在一對一關係,因此事實表對應一個物理可觀察的事件。在事實表內,所有事實只允許與宣告的粒度保持一致。
部署方式 - 星型模型或多維模型
選擇一種維度模型的落地方式。既可以選擇星型模型,部署在關聯式資料庫上,通過事實表及通過主外來鍵關聯的維度表;也可以選擇多維模型,落地於多維資料庫中。
3、建模規範
以維度建模為理論基礎,定義一系列術語來描述建模物件。下圖摘自於《阿里巴巴大資料實踐之路》。
資料域
指面向業務分析,將業務過程或者維度進行抽象的集合。在劃分資料域時,既能涵蓋當前所有的業務需求,又能在新業務進入時無影響地被包含進已有的資料域中和擴充套件新的資料域。
業務過程
指企業的業務活動事件,如下單、支付、退款都是業務過程。請注意,業務過程是一個不可拆分的行為事件,通俗地講,業務過程就是企業活動中的事件。
時間週期
用來明確資料統計的時間範圍或者時間點,如最近30天、自然周、截至當日等。
修飾型別
是對修飾詞的一種抽象劃分,是從屬於某個業務域的。
修飾詞
指除了統計維度以外指標的業務場景限定抽象。修飾詞隸屬於一種修飾型別。
度量/原子指標
原子指標和度量含義相同,基於某一業務事件行為下的度量,是業務定義中不可再拆分的指標,具有明確業務含義的名詞,如支付金額。
維度
維度是度量的環境,用來反映業務的一類屬性,這類屬性的集合構成一個維度,也可以稱為實體物件。維度屬於一個資料域,如地理維度(其中包擠國家、地區、省以及城市等級別的內容)、時間維度(其中包括年、季、月、周、日等級別的內容)。
維度屬性
維度屬性隸屬於一個維度,如地理維度裡面的國家名稱、國家ID、省份名稱等都屬於維度屬性。
派生指標
派生指標=一個原子指標+多個修飾詞(可選)+時間週期。可以理解為對原子指標業務統計範圍的圈定。
三、設計要點
1、維度表設計
維度是維度建模的基礎和靈魂。在維度建模中,將度量稱為"事實",將環境描述為"維度",維度是用於分析事實所需要的多樣環境。維度所包含的表示維度的列,稱為維度屬性。維度屬性是查詢約束條件、分組和報表標籤生成的基本來源,是資料易用性的關鍵。維度的作用一般是查詢約束、分類彙總以及排序等。維度的設計過程就是確定維度屬性的過程,如何生成維度屬性,以及所生成的維度屬性的優劣,決定了維度使用的方便性,成為資料倉儲易用性的關鍵。正如Kimball所說的,資料倉儲的能力直接與維度屬性的質量和深度成正比。
在整個設計過程中,應當遵循下面一些原則:
- 維度屬性儘量豐富,為資料使用打下基礎。
- 給出詳實的、富有意義的文字描述。
- 沉澱通用維度屬性,為建立一致性維度做好鋪墊。
- 嚴格區分事實與維度,通過使用場景進行區分。
2、事實表設計
事實表作為資料倉儲維度建模的核心,緊緊圍繞著業務過程來設計,通過獲取描述業務過程的度量來表達業務過程,包含了引用的維度和與業務過程有關的度量。在設計過程中,可以選擇不同型別的事實表,它們有各自的適用場景。
在整個設計過程中,應當遵循下面一些原則:
- 選擇一種適合的事實表型別。
- 事實儘可能完整,包含整個業務過程的全部事實。
- 確保每一個事實度量都是一致性,反覆計算都會得到相同的結果。儘量記錄一些“原子”事實,而不是加工後的結果。
- 可適當做些”維度退化屬性”,提高事實表的查詢效能。
- 為提高聚合效能,可適度做些上卷匯聚事實表。
作者:韓鋒
來源:公眾號- 韓鋒頻道 ,歡迎關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2643828/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 九個問題帶你-從入門到熟悉 HTTPSHTTP
- 好程式設計師大資料教程分享Spark快速入門(72集影片+原始碼+筆記)程式設計師大資料Spark原始碼筆記
- 一篇帶你入門面向介面程式設計程式設計
- 致剛入職場的你 - 程式設計師的成長筆記程式設計師筆記
- 資料建模學習筆記 -- 類別不平衡問題筆記
- Java併發程式設計實戰筆記3:基礎構建模組Java程式設計筆記
- 好程式設計師分享自學大資料入門乾貨程式設計師大資料
- 帶你ECharts入個門Echarts
- 一篇文章帶你入門SQL程式設計GIFUSQL程式設計
- 好程式設計師大資料學習筆記:Storm架構程式設計師大資料筆記ORM架構
- 好程式設計師大資料筆記之:Hadoop叢集搭建程式設計師大資料筆記Hadoop
- 好程式設計師帶你認識“jQuery”程式設計師jQuery
- Java程式設計師,你的簡歷到底問題在哪?Java程式設計師
- 好程式設計師大資料培訓分享Hadoop入門進階程式設計師大資料Hadoop
- 程式設計師的數學筆記3--迭代法程式設計師筆記
- 程式設計師程式設計入門一定知道!程式設計師需要學什麼?程式設計師
- 優秀的程式設計師10分鐘內能搞定下面5個程式設計問題,你呢?程式設計師
- PHP程式設計師遇到問題的冷門知識點PHP程式設計師
- 程式設計師,你怎麼對待常見的資料一致性問題?程式設計師
- 好程式設計師大資料培訓分享關於kafka的幾個重要問題程式設計師大資料Kafka
- Python核心程式設計筆記第二章----快速入門Python程式設計筆記
- 好程式設計師大資料培訓之Hadoop常見問題程式設計師大資料Hadoop
- 10本程式設計書籍推薦,帶你從入門到精通!程式設計
- 高效程式設計師的45個習慣 讀書筆記程式設計師筆記
- 新書出版 |《資料庫程式設計師面試筆試真題庫》新書資料庫程式設計師面試筆試
- 3.Hibernate入門筆記筆記
- 程式設計師怎麼高效做筆記程式設計師筆記
- 12個例子帶你入門Electron
- python程式設計:從入門到實踐學習筆記-字典Python程式設計筆記
- 程式設計師入門,7個方法幫助你提高學習效率!程式設計師
- 程式設計師大殺器?帶你玩轉ChatGPT程式設計師ChatGPT
- 3000字乾貨帶你入門資料倉儲,跑通複雜業務場景資料建模全流程
- 好程式設計師大資料培訓簡述Hadoop常見問題程式設計師大資料Hadoop
- 好程式設計師大資料基礎教程分享TextFile分割槽問題程式設計師大資料
- 一個引發程式設計師們幹架的問題程式設計師
- 程式設計入門,這763位老程式設計師有話講!程式設計師
- Go Web 程式設計入門--應用資料庫GoWeb程式設計資料庫
- 好程式設計師大資料學習路線分享Actor學習筆記程式設計師大資料筆記