數(shù)據(jù)倉庫系列10- 數(shù)據(jù)倉庫規(guī)范

一. 數(shù)據(jù)模型架構(gòu)原則

1.1 數(shù)據(jù)倉庫分層

分層的好處:

  1. 清晰數(shù)據(jù)結(jié)構(gòu);
  2. 數(shù)據(jù)血緣追蹤;
  3. 減少重復(fù)開發(fā);
  4. 數(shù)據(jù)關(guān)系條理化;
  5. 屏蔽原始數(shù)據(jù)的影響。
image.png

當(dāng)前DW結(jié)構(gòu)現(xiàn)況

image.png

1.1.1 ODS(源數(shù)據(jù)層)

??ODS 層,是最接近數(shù)據(jù)源中數(shù)據(jù)的一層,為了考慮后續(xù)可能需要追溯數(shù)據(jù)問題,因此對于這一層就不建議做過多的數(shù)據(jù)清洗工作,原封不動(dòng)地接入原始數(shù)據(jù)即可,至于數(shù)據(jù)的去噪、去重、異常值處理等過程可以放在后面的 DWD 層來做。

1.1.2 DW(數(shù)據(jù)倉庫層)

??數(shù)據(jù)倉庫層是我們在做數(shù)據(jù)倉庫時(shí)要核心設(shè)計(jì)的一層,在這里,從 ODS 層中獲得的數(shù)據(jù)按照主題建立各種數(shù)據(jù)模型。

??DW 層又細(xì)分為 DWD(Data Warehouse Detail)層、DWM(Data WareHouse Middle)層和 DWS(Data WareHouse Servce) 層。

1.1.2.1 數(shù)據(jù)明細(xì)層:DWD(Data Warehouse Detail)

??該層一般保持和 ODS 層一樣的數(shù)據(jù)粒度,并且提供一定的數(shù)據(jù)質(zhì)量保證。DWD 層要做的就是將數(shù)據(jù)清理、整合、規(guī)范化、臟數(shù)據(jù)、垃圾數(shù)據(jù)、規(guī)范不一致的、狀態(tài)定義不一致的、命名不規(guī)范的數(shù)據(jù)都會(huì)被處理。

??同時(shí),為了提高數(shù)據(jù)明細(xì)層的易用性,該層會(huì)采用一些維度退化手法,將維度退化至事實(shí)表中,減少事實(shí)表和維表的關(guān)聯(lián)。

??另外,在該層也會(huì)做一部分的數(shù)據(jù)聚合,將相同主題的數(shù)據(jù)匯集到一張表中,提高數(shù)據(jù)的可用性 。

image.png

1.1.2.2 數(shù)據(jù)中間層:DWM(Data WareHouse Middle)

??該層會(huì)在 DWD 層的數(shù)據(jù)基礎(chǔ)上,數(shù)據(jù)做輕度的聚合操作,生成一系列的中間表,提升公共指標(biāo)的復(fù)用性,減少重復(fù)加工。

??直觀來講,就是對通用的核心維度進(jìn)行聚合操作,算出相應(yīng)的統(tǒng)計(jì)指標(biāo)。

??在實(shí)際計(jì)算中,如果直接從 DWD 或者 ODS 計(jì)算出寬表的統(tǒng)計(jì)指標(biāo),會(huì)存在計(jì)算量太大并且維度太少的問題,因此一般的做法是,在 DWM 層先計(jì)算出多個(gè)小的中間表,然后再拼接成一張 DWS 的寬表。由于寬和窄的界限不易界定,也可以去掉 DWM 這一層,只留 DWS 層,將所有的數(shù)據(jù)再放在 DWS 亦可。

image.png

1.1.2.3 數(shù)據(jù)服務(wù)層:DWS(Data WareHouse Servce)

??DWS 層為公共匯總層,會(huì)進(jìn)行輕度匯總,粒度比明細(xì)數(shù)據(jù)稍粗,基于 DWD 層上的基礎(chǔ)數(shù)據(jù),整合匯總成分析某一個(gè)主題域的服務(wù)數(shù)據(jù),一般是寬表。DWS 層應(yīng)覆蓋 80% 的應(yīng)用場景。又稱數(shù)據(jù)集市或?qū)挶怼?/p>

??按照業(yè)務(wù)劃分,如主題域流量、訂單、用戶等,生成字段比較多的寬表,用于提供后續(xù)的業(yè)務(wù)查詢,OLAP 分析,數(shù)據(jù)分發(fā)等。

??一般來講,該層的數(shù)據(jù)表會(huì)相對比較少,一張表會(huì)涵蓋比較多的業(yè)務(wù)內(nèi)容,由于其字段較多,因此一般也會(huì)稱該層的表為寬表。

image.png

1.1.3 ADS(數(shù)據(jù)應(yīng)用層)

??在這里,主要是提供給數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析使用的數(shù)據(jù),一般會(huì)存放在 ES、MySQL、 PostgreSql、Redis 等系統(tǒng)中供線上系統(tǒng)使用,也可能會(huì)存在 Hive 或者 Druid 中供數(shù)據(jù)分析和數(shù)據(jù)挖掘使用。比如我們經(jīng)常說的報(bào)表數(shù)據(jù),一般就放在這里。

1.1.4 維表層(Dimension)

??如果維表過多,也可針對維表設(shè)計(jì)單獨(dú)一層,維表層主要包含兩部分?jǐn)?shù)據(jù):
??1. 高基數(shù)維度數(shù)據(jù):一般是用戶資料表、商品資料表類似的資料表。數(shù)據(jù)量可能是千萬級(jí)或者上億級(jí)別。
??2. 低基數(shù)維度數(shù)據(jù):一般是配置表,比如枚舉值對應(yīng)的中文含義,或者日期維表。 數(shù)據(jù)量可能是個(gè)位數(shù)或者幾千幾萬。

1.2 主題域劃分原則

??主題域是指為了實(shí)現(xiàn)企業(yè)預(yù)定目標(biāo),根據(jù)數(shù)據(jù)的固有屬性對企業(yè)數(shù)據(jù)進(jìn)行分類而獲得的數(shù)據(jù)集合,主題域是企業(yè)數(shù)據(jù)架構(gòu)最上層的數(shù)據(jù)集合,需要注意的是進(jìn)行分類時(shí)并非是基于業(yè)務(wù)流程進(jìn)行的。一般對表示業(yè)務(wù)的主體、對象、行為的數(shù)據(jù)進(jìn)行分組。

1.2.1 按照業(yè)務(wù)或業(yè)務(wù)過程劃分

??業(yè)務(wù)容易理解,就是指的功能模塊/業(yè)務(wù)線。

??業(yè)務(wù)過程:指企業(yè)的業(yè)務(wù)活動(dòng)事件,如下單、支付、退款都是業(yè)務(wù)過程。不過需要注意的是,一個(gè)業(yè)務(wù)過程是一個(gè)不可拆分的行為事件,通俗的講,業(yè)務(wù)過程就是企業(yè)活動(dòng)中的事件。

1.2.2 按照數(shù)據(jù)域劃分

??數(shù)據(jù)域是指面向業(yè)務(wù)分析,將業(yè)務(wù)過程或者維度進(jìn)行抽象的集合。其中,業(yè)務(wù)過程可以概括為一個(gè)個(gè)不可拆分的行為事件,在業(yè)務(wù)過程下,可以定義指標(biāo),維度是指度量的環(huán)境,如買家下單事件,買家是維度。為保障整個(gè)體系的生命力,數(shù)據(jù)域是需要抽象提煉,并且長期維護(hù)和更新的,但不輕易變動(dòng)。在劃分?jǐn)?shù)據(jù)域時(shí),既能涵蓋當(dāng)前所有的業(yè)務(wù)需求,又能在新業(yè)務(wù)進(jìn)入時(shí)無影響地被包含進(jìn)已有的數(shù)據(jù)域中和擴(kuò)展新的數(shù)據(jù)域。

1.3 數(shù)據(jù)模型設(shè)計(jì)原則

當(dāng)事人模型:
無論是何種業(yè)務(wù)場景,都可以套用該模型

image.png

數(shù)據(jù)框架

image.png

  1. 高內(nèi)聚、低耦合
    ??即主題內(nèi)部高內(nèi)聚、 不同主題間低耦合。明細(xì)層按照業(yè)務(wù)過程劃分主題,匯總層按照“實(shí)體+ 活動(dòng)”劃分不同分析主題,應(yīng)用層根據(jù)應(yīng)用需求劃分不同應(yīng)用主題。

  2. 核心模型和擴(kuò)展模型要分離
    ??建立核心模型與擴(kuò)展模型體系,核心模型包括的字段支持常用的核心業(yè)務(wù),擴(kuò)展模型包括的字段支持個(gè)性化或少量應(yīng)用的需要,不能讓擴(kuò)展模型的字段過度侵入核心模型,以免破壞核心模型的架構(gòu)簡潔性與可維護(hù)性。

  3. 公共處理邏輯下沉及單一
    ??越是底層公用的處理邏輯越應(yīng)該在數(shù)據(jù)調(diào)度依賴的底層進(jìn)行封裝與實(shí)現(xiàn),不要讓公用的處理邏輯暴露給應(yīng)用實(shí)現(xiàn),不要讓公共邏輯多處同時(shí)存在。

  4. 成本與性能平衡
    ??適當(dāng)?shù)臄?shù)據(jù)冗余可換取查詢和刷新性能,不宜過度冗余與數(shù)據(jù)復(fù)制。

  5. 數(shù)據(jù)可回滾
    ??處理邏輯不變,在不同時(shí)間多次運(yùn)行數(shù)據(jù)結(jié)果確定不變。

二. 數(shù)倉公共開發(fā)規(guī)范

2.1 層次調(diào)用規(guī)范

??穩(wěn)定業(yè)務(wù)按照標(biāo)準(zhǔn)的數(shù)據(jù)流向進(jìn)行開發(fā),即 ODS –> DWD –> DWS –> ADS。非穩(wěn)定業(yè)務(wù)或探索性需求,可以遵循 ODS -> DWD -> ADS 或者 ODS -> DWD -> DWM ->ADS 兩個(gè)模型數(shù)據(jù)流。

禁止出現(xiàn)反向依賴

2.2 數(shù)據(jù)類型規(guī)范

需統(tǒng)一規(guī)定不同的數(shù)據(jù)的數(shù)據(jù)類型,嚴(yán)格按照規(guī)定的數(shù)據(jù)類型執(zhí)行:

  1. 金額:double 或使用 decimal(28,6) 控制精度等,明確單位是分還是元。
  2. 字符串:string。
  3. id類:bigint。
  4. 時(shí)間:string。
  5. 狀態(tài):string

2.3 數(shù)據(jù)冗余規(guī)范

寬表的冗余字段要確保:

  1. 冗余字段要使用高頻,下游3個(gè)或以上使用。
  2. 冗余字段引入不應(yīng)造成本身數(shù)據(jù)產(chǎn)生過多的延后。
  3. 冗余字段和已有字段的重復(fù)率不應(yīng)過大,原則上不應(yīng)超過60%,如需要可以選擇join或原表拓展。

2.4 NULL字段處理規(guī)范

對于維度字段,需設(shè)置為-1
對于指標(biāo)字段,需設(shè)置為 0

2.5 指標(biāo)口徑規(guī)范

保證主題域內(nèi),指標(biāo)口徑一致,無歧義。
??通過數(shù)據(jù)分層,提供統(tǒng)一的數(shù)據(jù)出口,統(tǒng)一對外輸出的數(shù)據(jù)口徑,避免同一指標(biāo)不同口徑的情況發(fā)生。

  1. 指標(biāo)梳理
    ??指標(biāo)口徑的不一致使得數(shù)據(jù)使用的成本極高,經(jīng)常出現(xiàn)口徑打架、反復(fù)核對數(shù)據(jù)的問題。在數(shù)據(jù)治理中,我們將需求梳理到的所有指標(biāo)進(jìn)行進(jìn)一步梳理,明確其口徑,如果存在兩個(gè)指標(biāo)名稱相同,但口徑不一致,先判斷是否是進(jìn)行合并,如需要同時(shí)存在,那么在命名上必須能夠區(qū)分開。

  2. 指標(biāo)管理
    ??指標(biāo)管理分為原子指標(biāo)維護(hù)和派生指標(biāo)維護(hù)。
    原子指標(biāo):
    ??選擇原子指標(biāo)的歸屬產(chǎn)線、業(yè)務(wù)板塊、數(shù)據(jù)域、業(yè)務(wù)過程
    ??選擇原子指標(biāo)的統(tǒng)計(jì)數(shù)據(jù)來源于該業(yè)務(wù)過程下的原始數(shù)據(jù)源
    ??錄入原子指標(biāo)的英文名稱、中文名稱、概述
    ??填寫指標(biāo)函數(shù)
    ??系統(tǒng)根據(jù)指標(biāo)函數(shù)自動(dòng)生成原子指標(biāo)的定義表達(dá)式
    ??系統(tǒng)根據(jù)指標(biāo)定義表達(dá)式以及數(shù)據(jù)源表生成原子指標(biāo)SQL
    派生指標(biāo):
    ??在原子指標(biāo)的基礎(chǔ)之上選擇了一些維度或者修飾限定詞。

2.6 數(shù)據(jù)表處理規(guī)范

2.6.1 增量表

新增數(shù)據(jù),增量數(shù)據(jù)是上次導(dǎo)出之后的新數(shù)據(jù)。

  1. 記錄每次增加的量,而不是總量;
  2. 增量表,只報(bào)變化量,無變化不用報(bào);
  3. 每天一個(gè)分區(qū)。

2.6.2 全量表

每天的所有的最新狀態(tài)的數(shù)據(jù)。

  1. 全量表,有無變化,都要報(bào);
  2. 每次上報(bào)的數(shù)據(jù)都是所有的數(shù)據(jù)(變化的 + 沒有變化的);
  3. 只有一個(gè)分區(qū)。

2.6.3 快照表

按日分區(qū),記錄截止數(shù)據(jù)日期的全量數(shù)據(jù)。

  1. 快照表,有無變化,都要報(bào);
  2. 每次上報(bào)的數(shù)據(jù)都是所有的數(shù)據(jù)(變化的 + 沒有變化的);
  3. 一天一個(gè)分區(qū)。

2.6.4 拉鏈表

記錄截止數(shù)據(jù)日期的全量數(shù)據(jù)。

  1. 記錄一個(gè)事物從開始,一直到當(dāng)前狀態(tài)的所有變化的信息;
  2. 拉鏈表每次上報(bào)的都是歷史記錄的最終狀態(tài),是記錄在當(dāng)前時(shí)刻的歷史總 量;
  3. 當(dāng)前記錄存的是當(dāng)前時(shí)間之前的所有歷史記錄的最后變化量(總量);
  4. 只有一個(gè)分區(qū)。

2.7 表的生命周期管理

??這部分主要是要通過對歷史數(shù)據(jù)的等級(jí)劃分與對表類型的劃分生成相應(yīng)的生命周期管理矩陣。

2.7.1 歷史數(shù)據(jù)等級(jí)劃分

主要將歷史數(shù)據(jù)劃分P0、Pl、P2、P3 四個(gè)等級(jí),其具體定義如下:

  1. P0 :非常重要的主題域數(shù)據(jù)和非常重要的應(yīng)用數(shù)據(jù),具有不可恢復(fù)性,如交易、日志、集團(tuán) KPI 數(shù)據(jù)、 IPO 關(guān)聯(lián)表。
  2. P1 :重要的業(yè)務(wù)數(shù)據(jù)和重要的應(yīng)用數(shù)據(jù),具有不可恢復(fù)性,如重要的業(yè)務(wù)產(chǎn)品數(shù)據(jù)。
  3. P2 :重要的業(yè)務(wù)數(shù)據(jù)和重要的應(yīng)用數(shù)據(jù),具有可恢復(fù)性,如交易線 ETL 產(chǎn)生的中間過程數(shù)據(jù)。
  4. P3 :不重要的業(yè)務(wù)數(shù)據(jù)和不重要的應(yīng)用數(shù)據(jù),具有可恢復(fù)性,如某些 SNS 產(chǎn)品報(bào)表。

2.7.2 表類型劃分

  1. 事件型流水表(增量表)
    ??事件型流水表(增量表)指數(shù)據(jù)無重復(fù)或者無主鍵數(shù)據(jù),如日志。

  2. 事件型鏡像表(增量表)
    ??事件型鏡像表(增量表)指業(yè)務(wù)過程性數(shù)據(jù),有主鍵,但是對于同樣主鍵的屬性會(huì)發(fā)生緩慢變化,如交易、訂單狀態(tài)與時(shí)間會(huì)根據(jù)業(yè)務(wù)發(fā)生變更。

  3. 維表
    ??維表包括維度與維度屬性數(shù)據(jù),如用戶表、商品表。

  4. Merge 全量表
    ??Merge 全量表包括業(yè)務(wù)過程性數(shù)據(jù)或者維表數(shù)據(jù)。由于數(shù)據(jù)本身有新增的或者發(fā)生狀態(tài)變更,對于同樣主鍵的數(shù)據(jù)可能會(huì)保留多份,因此可以對這些數(shù)據(jù)根據(jù)主鍵進(jìn)行 Merge 操作,主鍵對應(yīng)的屬性只會(huì)保留最新狀態(tài),歷史狀態(tài)保留在前一天分區(qū) 中。例如,用戶表、交易表等都可以進(jìn)行 Merge 操作。

  5. ETL 臨時(shí)表
    ??ETL 臨時(shí)表是指 ETL 處理過程中產(chǎn)生的臨時(shí)表數(shù)據(jù),一般不建議保留,最多7天。

  6. TT 臨時(shí)數(shù)據(jù)
    ??TT 拉取的數(shù)據(jù)和 DbSync 產(chǎn)生的臨時(shí)數(shù)據(jù)最終會(huì)流轉(zhuǎn)到 DS 層,ODS 層數(shù)據(jù)作為原始數(shù)據(jù)保留下來,從而使得 TT&DbSync 上游數(shù)據(jù)成為臨時(shí)數(shù)據(jù)。這類數(shù)據(jù)不建議保留很長時(shí)間,生命周期默認(rèn)設(shè)置為 93天,可以根據(jù)實(shí)際情況適當(dāng)減少保留天數(shù)。

  7. 普通全量表
    ??很多小業(yè)務(wù)數(shù)據(jù)或者產(chǎn)品數(shù)據(jù),BI一般是直接全量拉取,這種方式效率快,對存儲(chǔ)壓力也不是很大,而且表保留很長時(shí)間,可以根據(jù)歷史數(shù)據(jù)等級(jí)確定保留策略。
    ??通過上述歷史數(shù)據(jù)等級(jí)劃分與表類型劃分,生成相應(yīng)的生命周期管理矩陣,如下表所示:


    image.png

    image.png

三. 數(shù)倉各層開發(fā)規(guī)范

3.1 ODS層設(shè)計(jì)規(guī)范

3.1.1 同步規(guī)范:

  1. 一個(gè)系統(tǒng)源表只允許同步一次;
  2. 全量初始化同步和增量同步處理邏輯要清晰;
  3. 以統(tǒng)計(jì)日期和時(shí)間進(jìn)行分區(qū)存儲(chǔ);
  4. 目標(biāo)表字段在源表不存在時(shí)要自動(dòng)填充處理。

3.1.2 表分類與生命周期:

  1. ods流水全量表:
    不可再生的永久保存;
    日志可按留存要求;
    按需設(shè)置保留特殊日期數(shù)據(jù);
    按需設(shè)置保留特殊月份數(shù)據(jù);

  2. ods鏡像型全量表:
    推薦按天存儲(chǔ);
    對歷史變化進(jìn)行保留;
    最新數(shù)據(jù)存儲(chǔ)在最大分區(qū);
    歷史數(shù)據(jù)按需保留;

  3. ods增量數(shù)據(jù):
    推薦按天存儲(chǔ);
    有對應(yīng)全量表的,建議只保留14天數(shù)據(jù);
    無對應(yīng)全量表的,永久保留;

  4. ods的etl過程中的臨時(shí)表:
    推薦按需保留;
    最多保留7天;
    建議用完即刪,下次使用再生成;

  5. BDSync非去重?cái)?shù)據(jù):
    通過中間層保留,默認(rèn)用完即刪,不建議保留。

3.1.3 數(shù)據(jù)質(zhì)量

  1. 全量表必須配置唯一性字段標(biāo)識(shí);
  2. 對分區(qū)空數(shù)據(jù)進(jìn)行監(jiān)控;
  3. 對枚舉類型字段,進(jìn)行枚舉值變化和分布監(jiān)控;
  4. ods表數(shù)據(jù)量級(jí)和記錄數(shù)做環(huán)比監(jiān)控;
  5. ods全表都必須要有注釋;

3.2 公共維度層設(shè)計(jì)規(guī)范

3.2.1 設(shè)計(jì)準(zhǔn)則

  1. 一致性
    公共維度在不同的物理表中的字段名稱、數(shù)據(jù)類型、數(shù)據(jù)內(nèi)容必須保持一致(歷史原因不一致,要做好版本控制)

  2. 維度的組合與拆分
    組合原則:
    ??將維度與關(guān)聯(lián)性強(qiáng)的字段進(jìn)行組合,一起查詢,一起展示,兩個(gè)維度必須具有天然的關(guān)系,如:商品的基本屬性和所屬品牌。
    ??無相關(guān)性:如一些使用頻率較小的雜項(xiàng)維度,可以構(gòu)建一個(gè)集合雜項(xiàng)維度的特殊屬性。
    ??行為維度:經(jīng)過計(jì)算的度量,但下游當(dāng)維度處理,例:點(diǎn)擊量 0-1000,100-1000等,可以做聚合分類。
    拆分與冗余:
    ??針對重要性,業(yè)務(wù)相關(guān)性、源、使用頻率等可分為核心表、擴(kuò)展表。
    ??數(shù)據(jù)記錄較大的維度,可以適當(dāng)冗余一些子集。

3.2.2 存儲(chǔ)及生命周期管理

建議按天分區(qū):
3個(gè)月內(nèi)最大訪問跨度<=4天時(shí),建議保留最近7天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=12天時(shí),建議保留最近15天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=30天時(shí),建議保留最近33天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=90天時(shí),建議保留最近120天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=180天時(shí),建議保留最近240天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=300天時(shí),建議保留最近400天分區(qū);

3.3 DWD明細(xì)層設(shè)計(jì)規(guī)范

3.3.1 存儲(chǔ)及生命周期管理

建議按天分區(qū):
3個(gè)月內(nèi)最大訪問跨度<=4天時(shí),建議保留最近7天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=12天時(shí),建議保留最近15天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=30天時(shí),建議保留最近33天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=90天時(shí),建議保留最近120天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=180天時(shí),建議保留最近240天分區(qū);
3個(gè)月內(nèi)最大訪問跨度<=300天時(shí),建議保留最近400天分區(qū);

3.3.2 事務(wù)型事實(shí)表設(shè)計(jì)準(zhǔn)則

??基于數(shù)據(jù)應(yīng)用需求的分析設(shè)計(jì)事務(wù)型事實(shí)表,結(jié)合下游較大的針對某個(gè)業(yè)務(wù)過程和分析指標(biāo)需求,可考慮基于某個(gè)事件過程構(gòu)建事務(wù)型實(shí)時(shí)表;

??一般選用事件的發(fā)生日期或時(shí)間作為分區(qū)字段,便于掃描和裁剪;
冗余子集原則,有利于降低后續(xù)IO開銷;

??明細(xì)層事實(shí)表維度退化,減少后續(xù)使用join成本。

3.3.3 周期快照事實(shí)表

??周期快照事實(shí)表中的每行匯總了發(fā)生在某一標(biāo)準(zhǔn)周期,如某一天、某周、某月的多個(gè)度量事件。

??粒度是周期性的,不是個(gè)體的事務(wù)。

??通常包含許多事實(shí),因?yàn)槿魏闻c事實(shí)表粒度一致的度量事件都是被允許的。

3.3.4 累積快照事實(shí)表

??多個(gè)業(yè)務(wù)過程聯(lián)合分析而構(gòu)建的事實(shí)表,如采購單的流轉(zhuǎn)環(huán)節(jié)。

??用于分析事件時(shí)間和時(shí)間之間的間隔周期。

??少量的且當(dāng)前事務(wù)型不支持的,如關(guān)閉、發(fā)貨等相關(guān)的統(tǒng)計(jì)。

3.4 DWS公共匯總層設(shè)計(jì)規(guī)范

??數(shù)據(jù)倉庫的性能是數(shù)據(jù)倉庫建設(shè)是否成功的重要標(biāo)準(zhǔn)之一。聚集主要是通過匯總明細(xì)粒度數(shù)據(jù)來獲得改進(jìn)查詢性能的效果。通過訪問聚集數(shù)據(jù),可以減少數(shù)據(jù)庫在響應(yīng)查詢時(shí)必須執(zhí)行的工作量,能夠快速響應(yīng)用戶的查詢,同時(shí)有利于減少不同用訪問明細(xì)數(shù)據(jù)帶來的結(jié)果不一致問題。

3.4.1 聚集的基本原則

  1. 一致性。聚集表必須提供與查詢明細(xì)粒度數(shù)據(jù)一致的查詢結(jié)果。

  2. 避免單一表設(shè)計(jì)。不要在同一個(gè)表中存儲(chǔ)不同層次的聚集數(shù)據(jù)。

  3. 聚集粒度可不同。聚集并不需要保持與原始明細(xì)粒度數(shù)據(jù)一樣的粒度,聚集只關(guān)心所需要查詢的維度。

3.4.2 聚集的基本步驟

第一步:確定聚集維度
??在原始明細(xì)模型中會(huì)存在多個(gè)描述事實(shí)的維度,如日期、商品類別、賣家等,這時(shí)候需要確定根據(jù)什么維度聚集,如果只關(guān)心商品的交易額情況,那么就可以根據(jù)商品維度聚集數(shù)據(jù)。

第二步:確定一致性上鉆
??這時(shí)候要關(guān)心是按月匯總還是按天匯總,是按照商品匯總還是按照類目匯總,如果按照類目匯總,還需要關(guān)心是按照大類匯總還是小類匯總。當(dāng)然,我們要做的只是了解用戶需要什么,然后按照他們想要的進(jìn)行聚集。

第三步:確定聚集事實(shí)
??在原始明細(xì)模型中可能會(huì)有多個(gè)事實(shí)的度量,比如在交易中有交易額、交易數(shù)量等,這時(shí)候要明確是按照交易額匯總還是按照成交數(shù)量匯總。

3.4.3 公共匯總層設(shè)計(jì)原則

??除了聚集基本的原則外,公共匯總層還必須遵循以下原則:

  1. 數(shù)據(jù)公用性。匯總的聚集會(huì)有第三者使用嗎?基于某個(gè)維度的聚集是不是經(jīng)常用于數(shù)據(jù)分析中?如果答案是肯定的,那么就有必要把明細(xì)數(shù)據(jù)經(jīng)過匯總沉淀到聚集表中。

  2. 不跨數(shù)據(jù)域。數(shù)據(jù)域是在較高層次上對數(shù)據(jù)進(jìn)行分類聚集的抽象。

  3. 區(qū)分統(tǒng)計(jì)周期。在表的命名上要能說明數(shù)據(jù)的統(tǒng)計(jì)周期,如 _Id 表示最近1天,_td 表示截至當(dāng)天,_nd 表示最近N天。

四. 數(shù)據(jù)倉庫命名規(guī)范

4.1 表命名規(guī)范

一個(gè)中小型數(shù)據(jù)倉庫命名規(guī)范


image.png

4.2 詞根設(shè)計(jì)規(guī)范

??詞根屬于數(shù)倉建設(shè)中的規(guī)范,屬于元數(shù)據(jù)管理的范疇,現(xiàn)在把這個(gè)劃到數(shù)據(jù)治理的一部分。完整的數(shù)倉建設(shè)是包含數(shù)據(jù)治理的,只是現(xiàn)在談到數(shù)倉偏向于數(shù)據(jù)建模, 而談到數(shù)據(jù)治理,更多的是關(guān)于數(shù)據(jù)規(guī)范、數(shù)據(jù)管理。

?表命名,其實(shí)在很大程度上是對元數(shù)據(jù)描述的一種體現(xiàn),表命名規(guī)范越完善,我 們能從表名獲取到的信息就越多。比如:一部分業(yè)務(wù)是關(guān)于貨架的,英文名是:rack, rack 就是一個(gè)詞根,那我們就在所有的表、字段等用到的地方都叫 rack,不要叫成 別的什么。這就是詞根的作用,用來統(tǒng)一命名,表達(dá)同一個(gè)含義。

?指標(biāo)體系中有很多“率”的指標(biāo),都可以拆解成 XXX+率,率可以叫 rate,那我 們所有的指標(biāo)都叫做 XXX+rate。

?詞根:可以用來統(tǒng)一表名、字段名、主題域名等等。

?舉例: 以流程圖的方式來展示,更加直觀和易懂,本圖側(cè)重 dwm 層表的命名 規(guī)范,其余命名是類似的道理:


image.png
  1. 分層:表的使用范圍

  2. 事業(yè)群和部門:生產(chǎn)該表或者該數(shù)據(jù)的團(tuán)隊(duì)

  3. 業(yè)務(wù)線:表明該數(shù)據(jù)是哪個(gè)產(chǎn)品或者業(yè)務(wù)線相關(guān)

  4. 主題域:分析問題的角度,對象實(shí)體

  5. 自定義:一般會(huì)盡可能多描述該表的信息,比如活躍表、留存表等

  6. 更新周期:比如說天級(jí)還是月級(jí)更新

4.3 指標(biāo)命名規(guī)范

4.3.1 公共規(guī)則

  1. 所有單詞小寫
  2. 單詞之間下劃線分割(反例:appName 或 AppName)
  3. 可讀性優(yōu)于長度 (詞根,避免出現(xiàn)同一個(gè)指標(biāo),命名一致性)
  4. 禁止使用 sql 關(guān)鍵字,如字段名與關(guān)鍵字沖突時(shí) +col
  5. 數(shù)量字段后綴 _cnt 等標(biāo)識(shí)...
  6. 金額字段后綴 _price 標(biāo)識(shí)
  7. 天分區(qū)使用字段 dt,格式統(tǒng)一(yyyymmdd 或 yyyy-mm-dd)
  8. 小時(shí)分區(qū)使用字段 hh,范圍(00-23)
  9. 分鐘分區(qū)使用字段 mi,范圍(00-59)
  10. 布爾類型標(biāo)識(shí):is_{業(yè)務(wù)},不允許出現(xiàn)空值

4.3.2 指標(biāo)命名規(guī)范

結(jié)合指標(biāo)的特性以及詞根管理規(guī)范,將指標(biāo)進(jìn)行結(jié)構(gòu)化處理。

  1. 基礎(chǔ)指標(biāo)詞根,即所有指標(biāo)必須包含以下基礎(chǔ)詞根:


    image.png
  2. 業(yè)務(wù)修飾詞,用于描述業(yè)務(wù)場景的詞匯,例如trade-交易。

  3. 日期修飾詞,用于修飾業(yè)務(wù)發(fā)生的時(shí)間區(qū)間。


    image.png
  4. 聚合修飾詞,對結(jié)果進(jìn)行聚集操作。


    image.png

5.基礎(chǔ)指標(biāo),單一的業(yè)務(wù)修飾詞+基礎(chǔ)指標(biāo)詞根構(gòu)建基礎(chǔ)指標(biāo) ,例如:交易金額-transaction_amt。

6.派生指標(biāo),多修飾詞+基礎(chǔ)指標(biāo)詞根構(gòu)建派生指標(biāo)。派生指標(biāo)繼承基礎(chǔ)指標(biāo)的特性,例如:安裝門店數(shù)量-install_poi_cnt。

7.普通指標(biāo)命名規(guī)范,與字段命名規(guī)范一致,由詞匯轉(zhuǎn)換即可以。


image.png

參考:

  1. https://zhuanlan.zhihu.com/p/432010167
  2. 《大數(shù)據(jù)之路:阿里巴巴大數(shù)據(jù)實(shí)踐》
  3. 《數(shù)倉工具箱:維度建模權(quán)威指南 第三版》
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,185評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,446評(píng)論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,951評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,189評(píng)論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,718評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,602評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,800評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,045評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評(píng)論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,420評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,755評(píng)論 2 371

推薦閱讀更多精彩內(nèi)容