公共匯總粒度事實(shí)層(DWS)
公共匯總粒度事實(shí)層以分析的主題對(duì)象作為建模驅(qū)動(dòng),基于上層的應(yīng)用和產(chǎn)品的指標(biāo)需求構(gòu)建公共粒度的匯總指標(biāo)事實(shí)表。公共匯總層的一個(gè)表通常會(huì)對(duì)應(yīng)一個(gè)派生指標(biāo)。
公共匯總事實(shí)表設(shè)計(jì)原則
聚集是指針對(duì)原始明細(xì)粒度的數(shù)據(jù)進(jìn)行匯總。DWS公共匯總層是面向分析對(duì)象的主題聚集建模。在本教程中,最終的分析目標(biāo)為:最近一天某個(gè)類(lèi)目(例如:廚具)商品在各省的銷(xiāo)售總額、該類(lèi)目Top10銷(xiāo)售額商品名稱(chēng)、各省用戶(hù)購(gòu)買(mǎi)力分布。因此,我們可以以最終交易成功的商品、類(lèi)目、買(mǎi)家等角度對(duì)最近一天的數(shù)據(jù)進(jìn)行匯總。
聚集是不跨越事實(shí)的。聚集是針對(duì)原始星形模型進(jìn)行的匯總。為獲取和查詢(xún)與原始模型一致的結(jié)果,聚集的維度和度量必須與原始模型保持一致,因此聚集是不跨越事實(shí)的。
聚集會(huì)帶來(lái)查詢(xún)性能的提升,但聚集也會(huì)增加ETL維護(hù)的難度。當(dāng)子類(lèi)目對(duì)應(yīng)的一級(jí)類(lèi)目發(fā)生變更時(shí),先前存在的、已經(jīng)被匯總到聚集表中的數(shù)據(jù)需要被重新調(diào)整。
此外,進(jìn)行DWS層設(shè)計(jì)時(shí)還需遵循以下原則:
數(shù)據(jù)公用性:需考慮匯總的聚集是否可以提供給第三方使用。您可以判斷,基于某個(gè)維度的聚集是否經(jīng)常用于數(shù)據(jù)分析中。如果答案是肯定的,就有必要把明細(xì)數(shù)據(jù)經(jīng)過(guò)匯總沉淀到聚集表中。
不跨數(shù)據(jù)域:數(shù)據(jù)域是在較高層次上對(duì)數(shù)據(jù)進(jìn)行分類(lèi)聚集的抽象。數(shù)據(jù)域通常以業(yè)務(wù)過(guò)程進(jìn)行分類(lèi),例如交易統(tǒng)一劃到交易域下, 商品的新增、修改放到商品域下。
區(qū)分統(tǒng)計(jì)周期:在表的命名上要能說(shuō)明數(shù)據(jù)的統(tǒng)計(jì)周期,例如_1d表示最近1天,td表示截至當(dāng)天,nd表示最近N天。
公共匯總事實(shí)表規(guī)范
公共匯總事實(shí)表命名規(guī)范:dws_{業(yè)務(wù)板塊縮寫(xiě)/pub}_{數(shù)據(jù)域縮寫(xiě)}_{數(shù)據(jù)粒度縮寫(xiě)}[_{自定義表命名標(biāo)簽縮寫(xiě)}]_{統(tǒng)計(jì)時(shí)間周期范圍縮寫(xiě)}。
關(guān)于統(tǒng)計(jì)實(shí)際周期范圍縮寫(xiě),缺省情況下,離線計(jì)算應(yīng)該包括最近一天(_1d),最近N天(_nd)和歷史截至當(dāng)天(_td)三個(gè)表。如果出現(xiàn)_nd的表字段過(guò)多需要拆分時(shí),只允許以一個(gè)統(tǒng)計(jì)周期單元作為原子拆分。即一個(gè)統(tǒng)計(jì)周期拆分一個(gè)表,例如最近7天(_1w)拆分一個(gè)表。不允許拆分出來(lái)的一個(gè)表存儲(chǔ)多個(gè)統(tǒng)計(jì)周期。
對(duì)于小時(shí)表(無(wú)論是天刷新還是小時(shí)刷新),都用_hh 來(lái)表示。
對(duì)于分鐘表(無(wú)論是天刷新還是小時(shí)刷新),都用_mm來(lái)表示。
舉例如下:
dws_asale_trd_byr_subpay_1d(A電商公司買(mǎi)家粒度交易分階段付款一日匯總事實(shí)表)
dws_asale_trd_byr_subpay_td(A電商公司買(mǎi)家粒度分階段付款截至當(dāng)日匯總表)
dws_asale_trd_byr_cod_nd(A電商公司買(mǎi)家粒度貨到付款交易匯總事實(shí)表)
dws_asale_itm_slr_td(A電商公司賣(mài)家粒度商品截至當(dāng)日存量匯總表)
dws_asale_itm_slr_hh(A電商公司賣(mài)家粒度商品小時(shí)匯總表)---維度為小時(shí)
dws_asale_itm_slr_mm(A電商公司賣(mài)家粒度商品分鐘匯總表)---維度為分鐘
DWS層數(shù)據(jù)存儲(chǔ)及生命周期管理規(guī)范請(qǐng)參見(jiàn)CDM匯總層設(shè)計(jì)規(guī)范。
建表示例
滿(mǎn)足業(yè)務(wù)需求的DWS層建表語(yǔ)句如下。
CREATE TABLE IF NOT EXISTS dws_asale_trd_byr_ord_1d
(
buyer_id BIGINT COMMENT '買(mǎi)家ID',
buyer_nick STRING COMMENT '買(mǎi)家昵稱(chēng)',
mord_prov STRING COMMENT '收貨人省份',
cate_id BIGINT COMMENT '商品類(lèi)目ID',
cate_name STRING COMMENT '商品類(lèi)目名稱(chēng)',
confirm_paid_amt_sum_1d DOUBLE COMMENT '最近一天訂單已經(jīng)確認(rèn)收貨的金額總和'
)
COMMENT '買(mǎi)家粒度所有交易最近一天匯總事實(shí)表'
PARTITIONED BY (ds STRING COMMENT '分區(qū)字段YYYYMMDD')
LIFECYCLE 36000;
CREATE TABLE IF NOT EXISTS dws_asale_trd_itm_ord_1d
(
item_id BIGINT COMMENT '商品ID',
item_title STRING COMMENT '商品名稱(chēng)',
cate_id BIGINT COMMENT '商品類(lèi)目ID',
cate_name STRING COMMENT '商品類(lèi)目名稱(chēng)',
mord_prov STRING COMMENT '收貨人省份',
confirm_paid_amt_sum_1d DOUBLE COMMENT '最近一天訂單已經(jīng)確認(rèn)收貨的金額總和'
)
COMMENT '商品粒度交易最近一天匯總事實(shí)表'
PARTITIONED BY (ds STRING COMMENT '分區(qū)字段YYYYMMDD')
LIFECYCLE 36000;