目錄
1、什麼是次元表?
2、次元表設計原則
(1)次元屬性盡量豐富,為資料使用打下基礎
(2)給出詳實的、富有意義的文字描述
(3)區分數值型屬性和事實
(4)沉澱出通用的次元屬性,為建立一緻性次元做好鋪墊
(5)退化次元(DegenerateDimension)
(6)緩慢變化維(Slowly Changing Dimensions)
3、次元表設計方法
1、什麼是次元表?
次元是次元模組化的基礎和靈魂。在次元模組化中,将度量稱為“事實” , 将環境描述為“次元”。
次元表包含了事實表中指定屬性的相關詳細資訊,最常用的次元表有日期次元、城市次元等。
例,小編的日期維表:
num | 字段名 | 字段中文名 | 描述 | 資料類型 |
1 | date | 日期 | 日期 yyyMMdd格式 | bigint |
2 | week | 星期,數字型 | 星期,數字型 0-6 | bigint |
3 | week_cn | 星期中文名 | 星期中文名 星期一…… | string |
4 | year_weeks | 一年中的第幾周 | 一年中的第幾周 1 2 3…… | bigint |
5 | mon_dt | 本周周一日期 | 本周周一日期 | bigint |
6 | sun_dt | 本周周日日期 | 本周周日日期 | bigint |
7 | month | 年月 | 年月,yyyyMM格式 | bigint |
8 | month_short | 月份簡寫 | 月份簡寫,MM格式1~12 | bigint |
9 | month_cn | 月份中文名 | 月份中文名 一月…… | string |
10 | quarter | 季度 | 季度,yyyyQ1\2\3\4 | string |
11 | quarter_short | 季度 數字型 | 季度 數字型 1-4 | bigint |
12 | quarter_cn | 季度中文名 | 季度中文名 第一季度…… | string |
13 | year | 年份 | 年份,yyyy格式 | bigint |
2、次元表設計原則
次元的作用一般是查詢限制、分類彙總以及排序等,我們在進行次元表設計時,應當提前考慮:
(1)次元屬性盡量豐富,為資料使用打下基礎
比如淘寶商品次元有近百個次元屬性,為下遊的資料統計、分析、探查提供了良好的基礎。
(2)給出詳實的、富有意義的文字描述
屬性不應該是編碼,而應該是真正的文字。在間裡巴巴次元模組化中, 一般是編碼和文字同時存在,比如商品次元中的商品 ID 和商品标題、 類目 ID 和 類目名稱等。 ID 一 般用于不同表之間的關聯,而名稱一般用 于報表标簽
(3)區分數值型屬性和事實
數值型宇段是作為事實還是次元屬性,可以參考字段的一般用途。 如果通常用于查詢限制條件或分組統計,則是作為次元屬性;如果通常 用于參與度量的計算, 則是作為事實。比如商品價格,可以用于查詢約 束條件或統計價格區間 的商品數量,此時是作為次元屬性使用的;也可 以用于統計某類目 下商品的平均價格,此時是作為事實使用的。另外, 如果數值型字段是離散值,則作為次元屬性存在的可能性較大;如果數 值型宇段是連續值 ,則作為度量存在的可能性較大,但并不絕對,需要 同時參考宇段的具體用途。
(4)沉澱出通用的次元屬性,為建立一緻性次元做好鋪墊
有些次元屬性擷取需要進行比較複雜的邏輯處理,有些需要通過多表關聯得到,或者通過單表 的不同宇段混合處理得到,或者通過對單表 的某個字段進行解析得到。此時,需要将盡可能多的通用的次元屬性進 行沉澱。一方 面,可以提高下遊使用的友善性,減少複雜度;另一方面,可以避免下遊使用解析時由于各自邏輯不同而導緻口徑不 一緻。
(5)退化次元(DegenerateDimension)
在次元類型中,有一種重要的次元稱作為退化次元。這種次元指的是直接把一些簡單的次元放在事實表中。退化次元是次元模組化領域中的一個非常重要的概念,它對了解次元模組化有着非常重要的作用,退化次元一般在分析中可以用來做分組使用。
(6)緩慢變化維(Slowly Changing Dimensions)
次元的屬性并不是始終不變的,它會随着時間的流逝發生緩慢的變化,這種随時間發生變化的次元我們一般稱之為緩慢變化維(SCD),緩慢變化維一般使用代理健作為次元表的主健。
緩慢變化維的三種處理方式:
① TYPE1 直接覆寫原值
适用于:不看曆史資料,簡單粗暴
② TYPE2 拉連結清單
需要在次元行再增加三列:有效日期、截止日期、行辨別(可選)。
在舊的一行資料增加關鍊時間(end_date),新的一行資料增加開鍊時間和關鍊時間,多條資料加起來是一個完整的時間周期。
③ TYPE3 增加屬性列
3、次元表設計方法
- 第一步:選擇次元或建立次元。作為次元模組化的核心,在企業級數 據倉庫中必須保證次元的唯一性。以淘寶商品次元為例,有且隻允許有 一個次元定義。
- 第二步:确定主維表。此處的主維表一般是 ODS 表,直接與業務 系統同步。以淘寶商品次元為例, s_auction_auctions 是與前台商品中心 系統同步的商品表,此表即是主維表。
- 第三步:确定相關維表。資料倉庫是業務源系統的資料整合,不同業務系統或者同 一業務系統中的表之間存在 關聯性。根據對業務的梳 理,确定哪些表和主維表存在關聯關系,并選擇其中的某些表用于生成次元屬性。
- 第四步 :确定次元屬性。本步驟主要 包括兩個階段,其中第 一 個階 段是從主維表 中選擇次元屬性或生成新的次元屬性;第 二個階段是從相 關維表中選擇次元屬性或生成新 的次元屬性。以淘寶商品次元為例,從 主維表 (s_auction_auctions)和類目、 SPU、賣家、店鋪等相關維表中 選擇次元屬性或生成新 的次元屬性。
參考文獻:阿裡巴巴大資料之路