【數據倉庫】電商行業數據倉庫建模實踐(一)

一、爲什麼要數據建模

    什麼是數據倉庫?數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合,用於支持管理決策。
    什麼是數據建模?如何將數據倉庫的數據進行有序、有結構地分類組織和存儲,這便是數據建模。
    好的數據建模方案,應該具備哪些特性:
    1)使用:良好的數據模型能幫助我們快速查詢所需數據,改善用戶使用數據的體驗,提高使用數據的效率;
    2)質量:良好的數據模型能改善統計口徑的不一致性,減少數據計算錯誤的可能性;
    3)成本:良好的數據模型能極大減少不必要數據的冗餘,實現計算結果複用,降低數據存儲和計算的成本;
    4)性能:良好的數據模型能加速數據加工進程,縮短數據產出時間。

二、有哪些數據建模方法論

    ER建模、維度建模、DataVault建模等等。
    本文主要遵循維度建模思想,以電商普遍的分析決策需求出發來構建公共數據層模型。
    


三、數據倉庫建模原則


    1)高內聚低耦合:將業務相近的放在一起,將高概率使用的放一起,遵循軟件設計開發的高內聚低耦合原則
    2)公共處理邏輯下沉:越是底層公用的處理邏輯越應該在數據調度依賴的底層進行封裝,公共邏輯不應該多處同時存在
    3)數據可回滾:處理邏輯不變,在不同時間多次運行數據結果不變
    4)一致性:相同含義的字段在不同表中必須使用相同的命名以及類型,表名必須清晰,包含層次結構,易於理解
    5)評審機制:模型設計必須進行評審,以確保模型實施過程的正確性

四、數據倉庫模型層次劃分


    1)操作數據層ODS(Operational Data Store):貼源設計,存放各源系統數據,只做簡單清洗;結構化數據增量或全量同步,非結構化數據結構化處理
    2)公共數據層CDS(Common Data Store):維度建模設計,存放明細數據、公共指標彙總數據以及維表數據
        2-1)明細數據層CDDS(Detail Data Store):存放細粒度事實表數據(dwd)及維表數據(dim)
        2-2)彙總數據層CSDS(Summary Data Store):存放粗粒度事實表數據(dws)
    3)應用數據層ADS(Application Data Store):應用驅動設計,存放數據產品個性化的指標數據;基於應用的數據組裝
    


五、數據倉庫規範定義


    名詞定義:
    1)數據域:
        指面向業務分析,將業務過程或者維度進行進行抽象的集合。
        數據域需要長期維護和更新,但不輕易變動。
        在劃分數據域時,既能涵蓋當前所有的業務需求,又能在新業務進入時無影響的被包含進已有的數據域中和擴展新的數據域。
    2)業務過程:指企業的業務活動事件,如下單、支付都是業務過程。業務過程是一個不可拆分的行爲事件。
    3)度量:某一業務事件行爲下的度量,是業務定義中不可再拆分的指標,具有明確業務含義的名詞,如支付金額
    4)維度:維度是度量的環境,用來反映業務的一類屬性。
    
    命名規範:
    1)物理模型表名命名規範:
        ods:ods.源數據庫名_源數據庫表名
        dwd:dw.dwd_數據域_業務過程
        dws:dw.dws_數據域_業務過程_彙總週期
        dim:dw.dim_數據域_維度名
        ads:ads.分析主題_分析內容
    2)物理模型字段命名規範:
        命名約定:
            優先使用英文簡寫來命名,其次是英文全稱,如英文全稱過於複雜,使用漢語拼音首字母替代
        維度屬性:
            儘可能使用英文縮寫
        度量命名:
            原子指標:動作_度量,如銷售數量 sales_num
            派生指標:原子指標[時間週期][修飾詞],如3C品類最近7天商品銷售數量 sales_num_7d_3c

 

六、數據倉庫數據域劃分


    1)用戶域(user):註冊、存量等
    2)商品域(goods):上架、下架、存量等
    3)交易域(trans):下單、支付等
    4)日誌域(log):訪問、曝光、點擊、下單、加購等
    5)客服域(cs):諮詢、投訴等
    6)互動域(in):評論、抽獎等
    7)供應鏈域(sc):採購、物流等
    8)公共域(com):時間維度、地理維度等

 

七、維度與事實表設計原則


    1)儘可能生成豐富的維度屬性
    2)儘量沉澱出通用的維度屬性
    3)儘可能包含所有與業務過程相關的事實
    4)只選擇與業務過程相關的事實
    5)分解不可加性事實爲可加的組件
    6)同一個事實表中不能存在多種不同粒度的事實
    7)事實表的單位要保持一致
    8)對事實表的null值要處理


八、用戶域數據建模


    1)用戶註冊事實表 dw.dwd_user_register 無事實的事實表
    
    主鍵    用戶編號    user_id
    外鍵    來源編號    source_id
    外鍵    設備編號    eqpt_id
    日期維度    註冊時間    reg_time    
    雜項維度    註冊方式(手機、郵箱等)    reg_type    
    雜項維度    註冊平臺(app、m站、pc站等)    platform
    雜項維度    註冊IP    ip
    雜項維度    推薦人用戶編號    parent_id
    分區鍵    註冊日期    reg_date
    
    2)用戶維表 dw.dim_user 維度表
    
    分區主鍵    用戶編號    user_id
    用戶維度    用戶賬號    user_name
    用戶維度    用戶郵箱    email
    用戶維度    用戶手機    mobile
    用戶維度    用戶暱稱    nickname
    用戶維度    用戶等級    user_lvl
    用戶維度    用戶餘額    balance
    用戶維度    用戶積分    integral
    分區鍵    數據日期    data_date
    
    可考慮使用拉鍊表形式進行存儲
    


九、商品域數據建模

    1)商品上下架事實表    dw.dwd_goods_on_off_sale 多事務事實表:商品上架、商品下架
    商品維度    商品編號    goods_id
    日期維度    上架時間    on_sale_time
    日期維度    下架時間    off_sale_time
    雜項維度    下架原因    off_sale_reason
    雜項維度    上下架類型    operation_type
    分區鍵    數據日期    data_date    nvl(off_sale_time, on_sale_time)

    off_sale_time - on_sale_time 可以計算商品在架時間
    
    2)商品維表 dw.dim_goods 維度表
    分區主鍵    商品編號    goods_id
    外鍵    類目編號    cat_id
    外鍵    供應商編號    supplier_id
    商品維度    商品名稱    goods_name
    商品維度    商品貨號    goods_sn
    商品維度    商品鏈接    goods_link
    商品維度    商品季節    goods_season
    商品維度    品牌名稱    brand_name
    商品維度    風格名稱    style_name
    商品維度    商品屬性    goods_attr    以key-value拼接成json形式存儲
    商品維度    首次上架時間    first_on_sale_time
    商品維度    最近下架時間    last_off_sale_time
    商品維度    最近下架原因    last_off_sale_reason
    商品維度    累計在架天數    on_sale_days
    商品維度    是否在架    is_on_sale
    分區鍵    數據日期    data_date
    
    可考慮使用拉鍊表形式進行存儲
    
    3)商品SKU維表 dw.dim_goods_sku 維度表
    分區主鍵    SKU編號    sku_id
    外鍵    商品編號    goods_id
    SKU維度    是否啓用    is_enable
    SKU維度    SKU顏色    sku_color
    SKU維度    SKU尺寸    sku_size
    SKU維度    SKU重量    sku_weight
    SKU維度    SKU長    sku_length
    SKU維度 SKU寬    sku_width
    SKU維度    SKU高    sku_height
    SKU維度    SKU成本價    cost_price
    SKU維度    SKU吊牌價    shop_price
    SKU維度    SKU售價    promote_price
    SKU維度    SKU促銷開始時間    promote_start_time
    SKU維度    SKU促銷結束時間    promote_end_time
    分區鍵    數據日期    data_date
    
    可考慮使用拉鍊表形式進行存儲
    
    4)商品類目維表 dw.dim_goods_cat 維度表
    分區主鍵    類目編號    cat_id
    類目維度    類目名稱    cat_name
    類目維度    類目描述    cat_desc
    類目維度    類目層級    cat_lvl
    類目維度    是否葉子節點    is_leaf
    類目維度    父級類目編號    parent_id
    類目維度    父級類目名稱    parent_name
    類目維度    是否啓用    is_enable
    類目維度    一級類目編號    cat_lvl1_id
    類目維度    一級類目名稱    cat_lvl1_name
    類目維度    二級類目編號    cat_lvl2_id
    類目維度    二級類目名稱    cat_lvl2_name
    類目維度     三級類目編號    cat_lvl3_id
    類目維度    三級類目名稱    cat_lvl3_name
    分區鍵    數據日期    data_date
    
    可考慮使用拉鍊表形式進行存儲
    


十、交易域數據建模
    


    1)交易事實表 dw.dwd_trans_order 多事務事實表:下單、支付
    主鍵    子訂單編號    sub_order_id
    外鍵    父訂單編號    order_id
    外鍵    用戶編號    user_id
    外鍵    商品編號    goods_id
    外鍵    SKU編號    sku_id
    外鍵    類目編號    cat_id
    外鍵    優惠編號    discount_id
    日期維度    下單時間    order_time    
    日期維度    支付時間    pay_time    
    雜項維度    是否當天下單    is_order
    雜項維度    是否當天支付    is_paid
    雜項維度    下單時SKU吊牌價    shop_price
    雜項維度    下單時SKU售價    promote_price
    度量    購買數量    order_num
    度量    購買全額    order_amt
    度量    購買優惠金額    order_discount
    分區鍵    數據日期    data_date    nvl(pay_time, order_time)
        
    2)訂單維表 dw.dim_order 維度表
    
    主鍵    訂單編號    order_id
    外鍵    優惠編號    discount_id
    訂單維度    下單平臺(app、m站、pc站等)    platform
    訂單維度    支付方式編號    pay_id
    訂單維度    支付方式名稱    pay_name
    訂單維度    支付平臺(app、m站、pc站等)    platform
    訂單維度    收貨人姓名    name
    訂單維度    收貨人電話    mobile
    訂單維度    收貨人省份    province
    訂單維度    收貨人城市    city
    訂單維度    收貨人詳細地址    address
    訂單維度    物流商編號    lp_id
    訂單維度    物流商名稱    lp_name
    訂單維度    物流單號    logistics_id
    分區鍵    數據日期    data_date
    
    可考慮使用拉鍊表形式進行存儲
    
    


十一、日誌域數據建模

 

    持續更新中,在後續文章中闡述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章