1、數(shù)據(jù)技術(shù)架構(gòu)
1.1、技術(shù)架構(gòu)
1.2、數(shù)據(jù)分層
將數(shù)據(jù)倉(cāng)庫(kù)分為三層,自下而上為:數(shù)據(jù)引入層(ODS,Operation Data Store)、數(shù)據(jù)公共層(CDM,Common Data Model)和數(shù)據(jù)應(yīng)用層(ADS,Application Data Service)。
數(shù)據(jù)倉(cāng)庫(kù)的分層和各層級(jí)用途如下圖所示。
● 數(shù)據(jù)引入層ODS(Operation Data Store):存放未經(jīng)過(guò)處理的原始數(shù)據(jù)至數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),結(jié)構(gòu)上與源系統(tǒng)保持一致,是數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)準(zhǔn)備區(qū)。主要完成基礎(chǔ)數(shù)據(jù)引入到MaxCompute的職責(zé),同時(shí)記錄基礎(chǔ)數(shù)據(jù)的歷史變化。
● 數(shù)據(jù)公共層CDM(Common Data Model,又稱通用數(shù)據(jù)模型層),包括DIM維度表、DWD和DWS,由ODS層數(shù)據(jù)加工而成。主要完成數(shù)據(jù)加工與整合,建立一致性的維度,構(gòu)建可復(fù)用的面向分析和統(tǒng)計(jì)的明細(xì)事實(shí)表,以及匯總公共粒度的指標(biāo)。
● 公共維度層(DIM):基于維度建模理念思想,建立整個(gè)企業(yè)的一致性維度。降低數(shù)據(jù)計(jì)算口徑和算法不統(tǒng)一風(fēng)險(xiǎn)。公共維度層的表通常也被稱為邏輯維度表,維度和維度邏輯表通常一一對(duì)應(yīng)。
公共匯總粒度事實(shí)層(DWS):以分析的主題對(duì)象作為建模驅(qū)動(dòng),基于上層的應(yīng)用和產(chǎn)品的指標(biāo)需求,構(gòu)建公共粒度的匯總指標(biāo)事實(shí)表,以寬表化手段物理化模型。構(gòu)建命名規(guī)范、口徑一致的統(tǒng)計(jì)指標(biāo),為上層提供公共指標(biāo),建立匯總寬表、明細(xì)事實(shí)表。公共匯總粒度事實(shí)層的表通常也被稱為匯總邏輯表,用于存放派生指標(biāo)數(shù)據(jù)。
● 明細(xì)粒度事實(shí)層(DWD):以業(yè)務(wù)過(guò)程作為建模驅(qū)動(dòng),基于每個(gè)具體的業(yè)務(wù)過(guò)程特點(diǎn),構(gòu)建最細(xì)粒度的明細(xì)層事實(shí)表??梢越Y(jié)合企業(yè)的數(shù)據(jù)使用特點(diǎn),將明細(xì)事實(shí)表的某些重要維度屬性字段做適當(dāng)冗余,即寬表化處理。明細(xì)粒度事實(shí)層的表通常也被稱為邏輯事實(shí)表。
● 數(shù)據(jù)應(yīng)用層ADS(Application Data Service):存放數(shù)據(jù)產(chǎn)品個(gè)性化的統(tǒng)計(jì)指標(biāo)數(shù)據(jù)。根據(jù)CDM與ODS層加工生成。
該數(shù)據(jù)分類架構(gòu)在ODS層分為三部分:數(shù)據(jù)準(zhǔn)備區(qū)、離線數(shù)據(jù)和準(zhǔn)實(shí)時(shí)數(shù)據(jù)區(qū)。整體數(shù)據(jù)分類架構(gòu)如下圖所示。
從源業(yè)務(wù)系統(tǒng)的數(shù)據(jù)經(jīng)過(guò)同步集成工具,同步到數(shù)據(jù)倉(cāng)庫(kù)的ODS層。經(jīng)過(guò)數(shù)據(jù)開發(fā)形成事實(shí)寬表后,再以商品、地域等為維度進(jìn)行公共匯總。數(shù)據(jù)處理流程如下:
1.3、數(shù)據(jù)劃分及命名空間約定
請(qǐng)根據(jù)業(yè)務(wù)劃分?jǐn)?shù)據(jù)并約定命名,建議針對(duì)業(yè)務(wù)名稱結(jié)合數(shù)據(jù)層次約定相關(guān)命名的英文縮寫,這樣可以給后續(xù)數(shù)據(jù)開發(fā)過(guò)程中,對(duì)項(xiàng)目空間、表、字段等命名做為重要參照。
● 按業(yè)務(wù)劃分:命名時(shí)按主要的業(yè)務(wù)劃分,以指導(dǎo)物理模型的劃分原則、命名原則及使用的ODS project。例如,按業(yè)務(wù)定義英文縮寫,阿里的“淘寶”英文縮寫可以定義為“tb”。
● 按數(shù)據(jù)域劃分:命名時(shí)按照CDM層的數(shù)據(jù)進(jìn)行數(shù)據(jù)域劃分,以便有效地對(duì)數(shù)據(jù)進(jìn)行管理,以及指導(dǎo)數(shù)據(jù)表的命名。例如,“交易”數(shù)據(jù)的英文縮寫可定義為“trd”。
● 按業(yè)務(wù)過(guò)程劃分:當(dāng)一個(gè)數(shù)據(jù)域由多個(gè)業(yè)務(wù)過(guò)程組成時(shí),命名時(shí)可以按業(yè)務(wù)流程劃分。業(yè)務(wù)過(guò)程是從數(shù)據(jù)分析角度看客觀存在的或者抽象的業(yè)務(wù)行為動(dòng)作。例如,交易數(shù)據(jù)域中的“退款”這個(gè)業(yè)務(wù)過(guò)程的英文縮寫可約定命名為“rfd_ent”。
2、數(shù)據(jù)模型
模型是對(duì)現(xiàn)實(shí)事物的反映和抽象,能幫助我們更好地了解客觀世界。數(shù)據(jù)模型定義了數(shù)據(jù)之間關(guān)系和結(jié)構(gòu),使得我們可以有規(guī)律地獲取想要的數(shù)據(jù)。例如,在一個(gè)超市里,商品的布局都有特定的規(guī)范,商品擺放的位置是按照消費(fèi)者的購(gòu)買習(xí)慣以及人流走向進(jìn)行擺放的。
● 數(shù)據(jù)模型的作用數(shù)據(jù)模型是在業(yè)務(wù)需求分析之后,數(shù)據(jù)倉(cāng)庫(kù)工作開始時(shí)的第一步。良好的數(shù)據(jù)模型可以幫助我們更好地存儲(chǔ)數(shù)據(jù),更有效率地獲取數(shù)據(jù),保證數(shù)據(jù)間的一致性。
● 模型設(shè)計(jì)的基本原則
● 高內(nèi)聚和低耦合一個(gè)邏輯和物理模型由哪些記錄和字段組成,應(yīng)該遵循最基本的軟件設(shè)計(jì)方法論中的高內(nèi)聚和低耦合原則。主要從數(shù)據(jù)業(yè)務(wù)特性和訪問(wèn)特性兩個(gè)角度來(lái)考慮:將業(yè)務(wù)相近或者相關(guān)的數(shù)據(jù)、粒度相同數(shù)據(jù)設(shè)計(jì)為一個(gè)邏輯或者物理模型;將高概率同時(shí)訪問(wèn)的數(shù)據(jù)放一起,將低概率同時(shí)訪問(wèn)的數(shù)據(jù)分開存儲(chǔ)。
核心模型與擴(kuò)展模型分離建立核心模型與擴(kuò)展模型體系,核心模型包括的字段支持常用核心的業(yè)務(wù),擴(kuò)展模型包括的字段支持個(gè)性化或是少量應(yīng)用的需要。在必須讓核心模型與擴(kuò)展模型做關(guān)聯(lián)時(shí),不能讓擴(kuò)展字段過(guò)度侵入核心模型,以免破壞了核心模型的架構(gòu)簡(jiǎn)潔性與可維護(hù)性。
● 公共處理邏輯下沉及單一底層公用的處理邏輯應(yīng)該在數(shù)據(jù)調(diào)度依賴的底層進(jìn)行封裝與實(shí)現(xiàn),不要讓公用的處理邏輯暴露給應(yīng)用層實(shí)現(xiàn),不要讓公共邏輯在多處同時(shí)存在。
成本與性能平衡適當(dāng)?shù)臄?shù)據(jù)冗余可換取查詢和刷新性能,不宜過(guò)度冗余與數(shù)據(jù)復(fù)制。
● 數(shù)據(jù)可回滾處理邏輯不變,在不同時(shí)間多次運(yùn)行數(shù)據(jù)的結(jié)果需確定不變。
一致性相同的字段在不同表中的字段名必須相同。
● 命名清晰可理解表命名規(guī)范需清晰、一致,表命名需易于下游的理解和使用。
2.1、數(shù)據(jù)接入ODS層
ODS層存放您從業(yè)務(wù)系統(tǒng)獲取的最原始的數(shù)據(jù),是其他上層數(shù)據(jù)的源數(shù)據(jù)。業(yè)務(wù)數(shù)據(jù)系統(tǒng)中的數(shù)據(jù)通常為非常細(xì)節(jié)的數(shù)據(jù),經(jīng)過(guò)長(zhǎng)時(shí)間累積,且訪問(wèn)頻率很高,是面向應(yīng)用的數(shù)據(jù)。
2.1.1、表設(shè)計(jì)
在ODS層主要包括的數(shù)據(jù)有:交易系統(tǒng)訂單詳情、用戶信息詳情、商品詳情等。這些數(shù)據(jù)未經(jīng)處理,是最原始的數(shù)據(jù)。邏輯上,這些數(shù)據(jù)都是以二維表的形式存儲(chǔ)。雖然嚴(yán)格的說(shuō)ODS層不屬于數(shù)倉(cāng)建模的范疇,但是合理的規(guī)劃ODS層并做好數(shù)據(jù)同步也非常重要。
說(shuō)明
● 表或字段命名盡量和業(yè)務(wù)系統(tǒng)保持一致,但是需要通過(guò)額外的標(biāo)識(shí)來(lái)區(qū)分增量和全量表。例如,我們通過(guò)_di來(lái)標(biāo)識(shí)該表為增量表。
● 命名時(shí)需要特別注意沖突處理,例如不同業(yè)務(wù)系統(tǒng)的表可能是同一個(gè)名稱。為區(qū)分兩個(gè)不同的表,您可以將這兩個(gè)同名表的來(lái)源數(shù)據(jù)庫(kù)名稱作為后綴或前綴。例如,表中某些字段的名稱剛好和關(guān)鍵字重名了,可以通過(guò)添加_col1后綴解決。
2.1.2、建表示例
本次示例,使用了6張ODS表:
● 記錄用于拍賣的商品信息:ods_auction。
● 記錄用于正常售賣的商品信息:ods_sale。
● 記錄用戶詳細(xì)信息:ods_users_extra。
● 記錄新增的商品成交訂單信息:ods_biz_order_delta。
● 記錄新增的物流訂單信息:ods_logistics_order_delta。
● 記錄新增的支付訂單信息:ods_pay_order_delta。
建表語(yǔ)句如下:
CREATE TABLE IF NOT EXISTS ods_auction
(
id STRING COMMENT '商品ID',
title STRING COMMENT '商品名',
gmt_modified STRING COMMENT '商品最后修改日期',
price DOUBLE COMMENT '商品成交價(jià)格,單位元',
starts STRING COMMENT '商品上架時(shí)間',
minimum_bid DOUBLE COMMENT '拍賣商品起拍價(jià),單位元',
duration STRING COMMENT '有效期,銷售周期,單位天',
incrementnum DOUBLE COMMENT '拍賣價(jià)格的增價(jià)幅度',
city STRING COMMENT '商品所在城市',
prov STRING COMMENT '商品所在省份',
ends STRING COMMENT '銷售結(jié)束時(shí)間',
quantity BIGINT COMMENT '數(shù)量',
stuff_status BIGINT COMMENT '商品新舊程度 0 全新 1 閑置 2 二手',
auction_status BIGINT COMMENT '商品狀態(tài) 0 正常 1 用戶刪除 2 下架 3 從未上架',
cate_id BIGINT COMMENT '商品類目ID',
cate_name STRING COMMENT '商品類目名稱',
commodity_id BIGINT COMMENT '品類ID',
commodity_name STRING COMMENT '品類名稱',
umid STRING COMMENT '買家umid'
)
COMMENT '商品拍賣ODS'
PARTITIONED BY (ds STRING COMMENT '格式:YYYYMMDD')
LIFECYCLE 400;
CREATE TABLE IF NOT EXISTS ods_sale
(
id STRING COMMENT '商品ID',
title STRING COMMENT '商品名',
gmt_modified STRING COMMENT '商品最后修改日期',
starts STRING COMMENT '商品上架時(shí)間',
price DOUBLE COMMENT '商品價(jià)格,單位元',
city STRING COMMENT '商品所在城市',
prov STRING COMMENT '商品所在省份',
quantity BIGINT COMMENT '數(shù)量',
stuff_status BIGINT COMMENT '商品新舊程度 0 全新 1 閑置 2 二手',
auction_status BIGINT COMMENT '商品狀態(tài) 0 正常 1 用戶刪除 2 下架 3 從未上架',
cate_id BIGINT COMMENT '商品類目ID',
cate_name STRING COMMENT '商品類目名稱',
commodity_id BIGINT COMMENT '品類ID',
commodity_name STRING COMMENT '品類名稱',
umid STRING COMMENT '買家umid'
)
COMMENT '商品正常購(gòu)買ODS'
PARTITIONED BY (ds STRING COMMENT '格式:YYYYMMDD')
LIFECYCLE 400;
CREATE TABLE IF NOT EXISTS ods_users_extra
(
id STRING COMMENT '用戶ID',
logincount BIGINT COMMENT '登錄次數(shù)',
buyer_goodnum BIGINT COMMENT '作為買家的好評(píng)數(shù)',
seller_goodnum BIGINT COMMENT '作為賣家的好評(píng)數(shù)',
level_type BIGINT COMMENT '1 一級(jí)店鋪 2 二級(jí)店鋪 3 三級(jí)店鋪',
promoted_num BIGINT COMMENT '1 A級(jí)服務(wù) 2 B級(jí)服務(wù) 3 C級(jí)服務(wù)',
gmt_create STRING COMMENT '創(chuàng)建時(shí)間',
order_id BIGINT COMMENT '訂單ID',
buyer_id BIGINT COMMENT '買家ID',
buyer_nick STRING COMMENT '買家昵稱',
buyer_star_id BIGINT COMMENT '買家星級(jí) ID',
seller_id BIGINT COMMENT '賣家ID',
seller_nick STRING COMMENT '賣家昵稱',
seller_star_id BIGINT COMMENT '賣家星級(jí)ID',
shop_id BIGINT COMMENT '店鋪ID',
shop_name STRING COMMENT '店鋪名稱'
)
COMMENT '用戶擴(kuò)展表'
PARTITIONED BY (ds STRING COMMENT 'yyyymmdd')
LIFECYCLE 400;
CREATE TABLE IF NOT EXISTS ods_biz_order_delta
(
biz_order_id STRING COMMENT '訂單ID',
pay_order_id STRING COMMENT '支付訂單ID',
logistics_order_id STRING COMMENT '物流訂單ID',
buyer_nick STRING COMMENT '買家昵稱',
buyer_id STRING COMMENT '買家ID',
seller_nick STRING COMMENT '賣家昵稱',
seller_id STRING COMMENT '賣家ID',
auction_id STRING COMMENT '商品ID',
auction_title STRING COMMENT '商品標(biāo)題 ',
auction_price DOUBLE COMMENT '商品價(jià)格',
buy_amount BIGINT COMMENT '購(gòu)買數(shù)量',
buy_fee BIGINT COMMENT '購(gòu)買金額',
pay_status BIGINT COMMENT '支付狀態(tài) 1 未付款 2 已付款 3 已退款',
logistics_id BIGINT COMMENT '物流訂單ID',
mord_cod_status BIGINT COMMENT '物流狀態(tài) 0 初始狀態(tài) 1 接單成功 2 接單超時(shí)3 攬收成功 4攬收失敗 5 簽收成功 6 簽收失敗 7 用戶取消物流訂單',
status BIGINT COMMENT '狀態(tài) 0 訂單正常 1 訂單不可見',
sub_biz_type BIGINT COMMENT '業(yè)務(wù)類型 1 拍賣 2 購(gòu)買',
end_time STRING COMMENT '交易結(jié)束時(shí)間',
shop_id BIGINT COMMENT '店鋪ID'
)
COMMENT '交易成功訂單日增量表'
PARTITIONED BY (ds STRING COMMENT 'yyyymmdd')
LIFECYCLE 7200;
CREATE TABLE IF NOT EXISTS ods_logistics_order_delta
(
logistics_order_id STRING COMMENT '物流訂單ID ',
post_fee DOUBLE COMMENT '物流費(fèi)用',
address STRING COMMENT '收貨地址',
full_name STRING COMMENT '收貨人全名',
mobile_phone STRING COMMENT '移動(dòng)電話',
prov STRING COMMENT '省份',
prov_code STRING COMMENT '省份ID',
city STRING COMMENT '市',
city_code STRING COMMENT '城市ID',
logistics_status BIGINT COMMENT '物流狀態(tài)
1 - 未發(fā)貨
2 - 已發(fā)貨
3 - 已收貨
4 - 已退貨
5 - 配貨中',
consign_time STRING COMMENT '發(fā)貨時(shí)間',
gmt_create STRING COMMENT '訂單創(chuàng)建時(shí)間',
shipping BIGINT COMMENT '發(fā)貨方式
1,平郵
2,快遞
3,EMS',
seller_id STRING COMMENT '賣家ID',
buyer_id STRING COMMENT '買家ID'
)
COMMENT '交易物流訂單日增量表'
PARTITIONED BY (ds STRING COMMENT '日期')
LIFECYCLE 7200;
CREATE TABLE IF NOT EXISTS ods_pay_order_delta
(
pay_order_id STRING COMMENT '支付訂單ID',
total_fee DOUBLE COMMENT '應(yīng)支付總金額 (數(shù)量*單價(jià))',
seller_id STRING COMMENT '賣家ID',
buyer_id STRING COMMENT '買家ID',
pay_status BIGINT COMMENT '支付狀態(tài)
1等待買家付款,
2等待賣家發(fā)貨,
3交易成功',
pay_time STRING COMMENT '付款時(shí)間',
gmt_create STRING COMMENT '訂單創(chuàng)建時(shí)間',
refund_fee DOUBLE COMMENT '退款金額(包含運(yùn)費(fèi))',
confirm_paid_fee DOUBLE COMMENT '已經(jīng)確認(rèn)收貨的金額'
)
COMMENT '交易支付訂單增量表'
PARTITIONED BY (ds STRING COMMENT '日期')
LIFECYCLE 7200;
2.1.3、存儲(chǔ)設(shè)計(jì)
為了滿足歷史數(shù)據(jù)分析需求,可以在ODS層表中添加時(shí)間維度作為分區(qū)字段。實(shí)際應(yīng)用中,可以選擇采用增量、全量存儲(chǔ)或拉鏈存儲(chǔ)的方式。
● 增量存儲(chǔ)以天為單位的增量存儲(chǔ),以業(yè)務(wù)日期作為分區(qū),每個(gè)分區(qū)存放日增量的業(yè)務(wù)數(shù)據(jù)。舉例如下:
● 1月1日,用戶A訪問(wèn)了A公司電商店鋪B,A公司電商日志產(chǎn)生一條記錄t1。1月2日,用戶A又訪問(wèn)了A公司電商店鋪C,A公司電商日志產(chǎn)生一條記錄t2。采用增量存儲(chǔ)方式,t1將存儲(chǔ)在1月1日這個(gè)分區(qū)中,t2將存儲(chǔ)在1月2日這個(gè)分區(qū)中。
1月1日,用戶A在A公司電商網(wǎng)購(gòu)買了B商品,交易日志將生成一條記錄t1。1月2日,用戶A又將B商品退貨了,交易日志將更新t1記錄。采用增量存儲(chǔ)方式,初始購(gòu)買的t1記錄將存儲(chǔ)在1月1日這個(gè)分區(qū)中,更新后的t1將存儲(chǔ)在1月2日這個(gè)分區(qū)中。
【說(shuō)明】 交易、日志等事務(wù)性較強(qiáng)的ODS表適合增量存儲(chǔ)方式。這類表數(shù)據(jù)量較大,采用全量存儲(chǔ)的方式存儲(chǔ)成本壓力大。此外,這類表的下游應(yīng)用對(duì)于歷史全量數(shù)據(jù)訪問(wèn)的需求較?。ù祟愋枨罂赏ㄟ^(guò)數(shù)據(jù)倉(cāng)庫(kù)后續(xù)匯總后得到)。例如,日志類ODS表沒(méi)有數(shù)據(jù)更新的業(yè)務(wù)過(guò)程,因此所有增量分區(qū)UNION在一起就是一份全量數(shù)據(jù)。
● 全量存儲(chǔ)以天為單位的全量存儲(chǔ),以業(yè)務(wù)日期作為分區(qū),每個(gè)分區(qū)存放截止到業(yè)務(wù)日期為止的全量業(yè)務(wù)數(shù)據(jù)。例如,1月1日,賣家A在A公司電商網(wǎng)發(fā)布了B、C兩個(gè)商品,前端商品表將生成兩條記錄t1、t2。1月2日,賣家A將B商品下架了,同時(shí)又發(fā)布了商品D,前端商品表將更新記錄t1,同時(shí)新生成記錄t3。采用全量存儲(chǔ)方式,在1月1日這個(gè)分區(qū)中存儲(chǔ)t1和t2兩條記錄,在1月2日這個(gè)分區(qū)中存儲(chǔ)更新后的t1以及t2、t3記錄。
【說(shuō)明】 對(duì)于小數(shù)據(jù)量的緩慢變化維度數(shù)據(jù),例如商品類目,可直接使用全量存儲(chǔ)。
● 拉鏈存儲(chǔ)通過(guò)新增兩個(gè)時(shí)間戳字段(start_dt和end_dt),將所有以天為粒度的變更數(shù)據(jù)都記錄下來(lái),通常分區(qū)字段也是這兩個(gè)時(shí)間戳字段。
拉鏈存儲(chǔ)舉例如下。
商品 start_dt end_dt 賣家 狀態(tài)
B 20160101 20160102 A 上架
C 20160101 30001231 A 上架
B 20160102 30001231 A 下架
這樣,下游應(yīng)用可以通過(guò)限制時(shí)間戳字段來(lái)獲取歷史數(shù)據(jù)。例如,用戶訪問(wèn)1月1日數(shù)據(jù),只需限制start_dt<=20160101并且 end_dt>20160101。
【說(shuō)明】 對(duì)于大數(shù)據(jù)量的緩慢變化維度數(shù)據(jù),例如會(huì)員信息表,可采取拉鏈表方式來(lái)存儲(chǔ)。
2.1.4、數(shù)據(jù)質(zhì)量規(guī)范
● 每個(gè)ODS全量表必須配置唯一性字段標(biāo)識(shí)。
● 每個(gè)ODS全量表必須有注釋。
● 每個(gè)ODS全量表必須監(jiān)控分區(qū)空數(shù)據(jù)。
● 建議對(duì)重要表的重要枚舉類型字段進(jìn)行枚舉值變化及枚舉值分布監(jiān)控。
● 建議對(duì)ODS表的數(shù)據(jù)量及數(shù)據(jù)記錄數(shù)設(shè)置周同環(huán)比監(jiān)控,如果周同環(huán)比無(wú)變化,表示源系統(tǒng)已遷移或下線。
2.1.5、其他規(guī)范
● 一個(gè)系統(tǒng)的源表只允許同步到數(shù)據(jù)倉(cāng)庫(kù)一次,保持表結(jié)構(gòu)的一致性。
● 數(shù)據(jù)集成同步全量數(shù)據(jù)時(shí)會(huì)直接進(jìn)入全量表的當(dāng)日分區(qū)。
● 所有ODS層的表都以統(tǒng)計(jì)日期及時(shí)間分區(qū)表方式存儲(chǔ),數(shù)據(jù)成本由存儲(chǔ)管理和策略控制。
● 如果源系統(tǒng)新增了字段,您需要重新配置數(shù)據(jù)集成同步作業(yè)。如果目標(biāo)表的字段在源系統(tǒng)中不存在,數(shù)據(jù)集成自動(dòng)填充NULL。
2.2、CDM公共維度層(DIM)
公共維度匯總層(DIM)基于維度建模理念,建立整個(gè)企業(yè)的一致性維度。
公共維度匯總層(DIM)主要由維度表(維表)構(gòu)成。維度是邏輯概念,是衡量和觀察業(yè)務(wù)的角度。維表是根據(jù)維度及其屬性將數(shù)據(jù)平臺(tái)上構(gòu)建的物理化的表,采用寬表設(shè)計(jì)的原則。因此,公共維度匯總層(DIM)首先需要定義維度。
2.2.1、定義維度
在劃分?jǐn)?shù)據(jù)域、構(gòu)建總線矩陣時(shí),需要結(jié)合對(duì)業(yè)務(wù)過(guò)程的分析定義維度。以A電商公司的營(yíng)銷業(yè)務(wù)板塊為例,在交易數(shù)據(jù)域中,我們重點(diǎn)考察確認(rèn)收貨(交易成功)的業(yè)務(wù)過(guò)程。在確認(rèn)收貨的業(yè)務(wù)過(guò)程中,主要有商品和收貨地點(diǎn)(本教程中,假設(shè)收貨和購(gòu)買是同一個(gè)地點(diǎn))兩個(gè)維度所依賴的業(yè)務(wù)角度。從商品角度可以定義出以下維度:
● 商品ID
● 商品名稱
● 商品價(jià)格
● 商品新舊程度0表示全新,1表示閑置,2表示二手。
● 商品類目ID
● 商品類目名稱
● 品類ID
● 品類名稱
● 買家ID
● 商品狀態(tài)0表示正常,1表示用戶刪除,2表示下架,3表示從未上架。
● 商品所在城市
● 商品所在省份
從地域角度,可以定義出以下維度:
● 買家ID
● 城市code
● 城市名稱
● 省份code
● 省份名稱
作為維度建模的核心,在企業(yè)級(jí)數(shù)據(jù)倉(cāng)庫(kù)中必須保證維度的唯一性。以A公司的商品維度為例,有且只允許有一種維度定義。例如,省份code這個(gè)維度,對(duì)于任何業(yè)務(wù)過(guò)程所傳達(dá)的信息都是一致的。
2.2.2、設(shè)計(jì)維表
完成維度定義后,您可以對(duì)維度進(jìn)行補(bǔ)充,進(jìn)而生成維表。維表的設(shè)計(jì)需要注意:
● 建議維表單表信息不超過(guò)1000萬(wàn)條。
● 維表與其他表進(jìn)行Join時(shí),建議您使用Map Join。
● 避免過(guò)于頻繁的更新維表的數(shù)據(jù)。
在設(shè)計(jì)維表時(shí),您需要從下列方面進(jìn)行考慮:
● 維表中數(shù)據(jù)的穩(wěn)定性。例如,A公司電商會(huì)員通常不會(huì)出現(xiàn)消亡,但會(huì)員數(shù)據(jù)可能在任何時(shí)候更新,此時(shí)要考慮創(chuàng)建單個(gè)分區(qū)存儲(chǔ)全量數(shù)據(jù)。如果存在不會(huì)更新的記錄,您可能需要分別創(chuàng)建歷史表與日常表。日常表用于存放當(dāng)前有效的記錄,保持表的數(shù)據(jù)量不會(huì)膨脹;歷史表根據(jù)消亡時(shí)間插入對(duì)應(yīng)分區(qū),使用單個(gè)分區(qū)存放分區(qū)對(duì)應(yīng)時(shí)間的消亡記錄。
● 維表是否需要垂直拆分。如果一個(gè)維表存在大量屬性不被使用,或由于承載過(guò)多屬性字段導(dǎo)致查詢變慢,則需要考慮對(duì)字段進(jìn)行拆分,創(chuàng)建多個(gè)維表。
● 維表是否需要水平拆分。如果記錄之間有明顯的界限,可以考慮拆成多個(gè)表或設(shè)計(jì)成多級(jí)分區(qū)。
● 核心維表的產(chǎn)出時(shí)間。通常有嚴(yán)格的要求。
設(shè)計(jì)維表的主要步驟如下:
- 初步定義維度。保證維度的一致性。
- 確定主維表(中心事實(shí)表,本教程中采用星型模型)。此處的主維表通常是數(shù)據(jù)引入層(ODS)表,直接與業(yè)務(wù)系統(tǒng)同步。例如,s_auction是與前臺(tái)商品中心系統(tǒng)同步的商品表,此表即是主維表。
- 確定相關(guān)維表。數(shù)據(jù)倉(cāng)庫(kù)是業(yè)務(wù)源系統(tǒng)的數(shù)據(jù)整合,不同業(yè)務(wù)系統(tǒng)或者同一業(yè)務(wù)系統(tǒng)中的表之間存在關(guān)聯(lián)性。根據(jù)對(duì)業(yè)務(wù)的梳理,確定哪些表和主維表存在關(guān)聯(lián)關(guān)系,并選擇其中的某些表用于生成維度屬性。以商品維度為例,根據(jù)對(duì)業(yè)務(wù)邏輯的梳理,可以得到商品與類目、賣家和店鋪等維度存在關(guān)聯(lián)關(guān)系。
- 確定維度屬性。主要包括兩個(gè)階段。第一個(gè)階段是從主維表中選擇維度屬性或生成新的維度屬性;第二個(gè)階段是從相關(guān)維表中選擇維度屬性或生成新的維度屬性。以商品維度為例,從主維表(s_auction)、類目、賣家和店鋪等相關(guān)維表中選擇維度屬性或生成新的維度屬性。維度屬性的設(shè)計(jì)需要注意:
○ 盡可能生成豐富的維度屬性。
○ 盡可能多地給出富有意義的文字性描述。
○ 區(qū)分?jǐn)?shù)值型屬性和事實(shí)。
○ 盡量沉淀出通用的維度屬性。
2.2.3、設(shè)計(jì)準(zhǔn)則
● 一致性維度規(guī)范公共層的維度表中相同維度屬性在不同物理表中的字段名稱、數(shù)據(jù)類型、數(shù)據(jù)內(nèi)容必須保持一致。除了以下情況:
● 在不同的實(shí)際物理表中,如果由于維度角色的差異,需要使用其他的名稱,其他名稱也必須是規(guī)范的維度屬性的別名。例如,定義一個(gè)標(biāo)準(zhǔn)的會(huì)員ID時(shí),如果在一個(gè)表中,分別要表示買家ID,賣家ID,那么設(shè)計(jì)規(guī)范階段就預(yù)先對(duì)會(huì)員ID分別定義買家ID和賣家ID。如果由于歷史原因,在暫時(shí)不一致的情況下,必須在規(guī)范的維度定義一個(gè)標(biāo)準(zhǔn)維度屬性,不同的物理名也必須是來(lái)自標(biāo)準(zhǔn)維度屬性的別名。
● 維度的組合與拆分
● 組合原則
○ 將維度所描述業(yè)務(wù)相關(guān)性強(qiáng)的字段在一個(gè)物理維表實(shí)現(xiàn)。相關(guān)性強(qiáng)是指經(jīng)常需要一起查詢或進(jìn)行報(bào)表展現(xiàn)、兩個(gè)維度屬性間是否存在天然的關(guān)系等。例如,商品基本屬性和所屬品牌。
○ 無(wú)相關(guān)性的維度可以適當(dāng)考慮雜項(xiàng)維度(例如交易),可以構(gòu)建一個(gè)交易雜項(xiàng)維度收集交易的特殊標(biāo)記屬性、業(yè)務(wù)分類等信息。也可以將雜項(xiàng)維度退化在事實(shí)表中處理,不過(guò)容易造成事實(shí)表相對(duì)龐大,加工處理較為復(fù)雜。
○ 所謂的行為維度是經(jīng)過(guò)匯總計(jì)算的指標(biāo),在下游的應(yīng)用使用時(shí)將其當(dāng)維度處理。如果有需要,度量指標(biāo)可以作為行為維度冗余到維度表中。
● 拆分與冗余
○ 對(duì)于維度屬性過(guò)多,涉及源較多的維度表(例如會(huì)員表),可以做適當(dāng)拆分:
○ 拆分為核心表和擴(kuò)展表。核心表相對(duì)字段較少,刷新產(chǎn)出時(shí)間較早,優(yōu)先使用。擴(kuò)展表字段較多,且可以冗余核心表部分字段,刷新產(chǎn)出時(shí)間較晚,適合數(shù)據(jù)分析人員使用。
○ 根據(jù)維度屬性的業(yè)務(wù)不相關(guān)性,將相關(guān)度不大的維度屬性拆分為多個(gè)物理表存儲(chǔ)。
○ 數(shù)據(jù)記錄數(shù)較大的維度表(例如商品表),可以適當(dāng)冗余一些子集合,以減少下游掃描數(shù)據(jù)量:
○ 可以根據(jù)當(dāng)天是否有行為,產(chǎn)出一個(gè)有活躍行為的相關(guān)維表,以減少應(yīng)用的數(shù)據(jù)掃描量。
○ 可根據(jù)所屬業(yè)務(wù)掃描數(shù)據(jù)范圍大小的不同,進(jìn)行適當(dāng)子集合冗余。
2.2.4、建表實(shí)例
本例中,最終的維表建表語(yǔ)句如下所示。
CREATE TABLE IF NOT EXISTS dim_asale_itm
(
item_id BIGINT COMMENT '商品ID',
item_title STRING COMMENT '商品名稱',
item_price DOUBLE COMMENT '商品成交價(jià)格_元',
item_stuff_status BIGINT COMMENT '商品新舊程度_0全新1閑置2二手',
cate_id BIGINT COMMENT '商品類目ID',
cate_name STRING COMMENT '商品類目名稱',
commodity_id BIGINT COMMENT '品類ID',
commodity_name STRING COMMENT '品類名稱',
umid STRING COMMENT '買家ID',
item_status BIGINT COMMENT '商品狀態(tài)_0正常1用戶刪除2下架3未上架',
city STRING COMMENT '商品所在城市',
prov STRING COMMENT '商品所在省份'
)
COMMENT '商品全量表'
PARTITIONED BY (ds STRING COMMENT '日期,yyyymmdd');
CREATE TABLE IF NOT EXISTS dim_pub_area
(
buyer_id STRING COMMENT '買家ID',
city_code STRING COMMENT '城市code',
city_name STRING COMMENT '城市名稱',
prov_code STRING COMMENT '省份code',
prov_name STRING COMMENT '省份名稱'
)
COMMENT '公共區(qū)域維表'
PARTITIONED BY (ds STRING COMMENT '日期分區(qū),格式y(tǒng)yyymmdd')
LIFECYCLE 3600;
2.3、CDM 明細(xì)粒度事實(shí)層(DWD)
明細(xì)粒度事實(shí)層以業(yè)務(wù)過(guò)程驅(qū)動(dòng)建模,基于每個(gè)具體的業(yè)務(wù)過(guò)程特點(diǎn),構(gòu)建最細(xì)粒度的明細(xì)層事實(shí)表。您可以結(jié)合企業(yè)的數(shù)據(jù)使用特點(diǎn),將明細(xì)事實(shí)表的某些重要維度屬性字段做適當(dāng)冗余,即寬表化處理。
公共匯總粒度事實(shí)層(DWS)和明細(xì)粒度事實(shí)層(DWD)的事實(shí)表作為數(shù)據(jù)倉(cāng)庫(kù)維度建模的核心,需緊繞業(yè)務(wù)過(guò)程來(lái)設(shè)計(jì)。通過(guò)獲取描述業(yè)務(wù)過(guò)程的度量來(lái)描述業(yè)務(wù)過(guò)程,包括引用的維度和與業(yè)務(wù)過(guò)程有關(guān)的度量。度量通常為數(shù)值型數(shù)據(jù),作為事實(shí)邏輯表的依據(jù)。事實(shí)邏輯表的描述信息是事實(shí)屬性,事實(shí)屬性中的外鍵字段通過(guò)對(duì)應(yīng)維度進(jìn)行關(guān)聯(lián)。
事實(shí)表中一條記錄所表達(dá)的業(yè)務(wù)細(xì)節(jié)程度被稱為粒度。通常粒度可以通過(guò)兩種方式來(lái)表述:一種是維度屬性組合所表示的細(xì)節(jié)程度,一種是所表示的具體業(yè)務(wù)含義。
作為度量業(yè)務(wù)過(guò)程的事實(shí),通常為整型或浮點(diǎn)型的十進(jìn)制數(shù)值,有可加性、半可加性和不可加性三種類型:
● 可加性事實(shí)是指可以按照與事實(shí)表關(guān)聯(lián)的任意維度進(jìn)行匯總。
● 半可加性事實(shí)只能按照特定維度匯總,不能對(duì)所有維度匯總。例如庫(kù)存可以按照地點(diǎn)和商品進(jìn)行匯總,而按時(shí)間維度把一年中每個(gè)月的庫(kù)存累加則毫無(wú)意義。
● 完全不可加性,例如比率型事實(shí)。對(duì)于不可加性的事實(shí),可分解為可加的組件來(lái)實(shí)現(xiàn)聚集。
事實(shí)表相對(duì)維表通常更加細(xì)長(zhǎng),行增加速度也更快。維度屬性可以存儲(chǔ)到事實(shí)表中,這種存儲(chǔ)到事實(shí)表中的維度列稱為維度退化,可加快查詢速度。與其他存儲(chǔ)在維表中的維度一樣,維度退化可以用來(lái)進(jìn)行事實(shí)表的過(guò)濾查詢、實(shí)現(xiàn)聚合操作等。
明細(xì)粒度事實(shí)層(DWD)通常分為三種:事務(wù)事實(shí)表、周期快照事實(shí)表和累積快照事實(shí)表。
事務(wù)型事實(shí)表
事務(wù)事實(shí)表用來(lái)描述業(yè)務(wù)過(guò)程,跟蹤空間或時(shí)間上某點(diǎn)的度量事件,保存的是最原子的數(shù)據(jù),也稱為原子事實(shí)表。事務(wù)型事實(shí)表主要用于分析行為與追蹤事件。事務(wù)事實(shí)表獲取業(yè)務(wù)過(guò)程中的事件或者行為細(xì)節(jié),然后通過(guò)事實(shí)與維度之間關(guān)聯(lián),可以非常方便地統(tǒng)計(jì)各種事件相關(guān)的度量,例如瀏覽UV,搜索次數(shù)等等。
● 基于數(shù)據(jù)應(yīng)用需求的分析設(shè)計(jì)事務(wù)型事實(shí)表,如果下游存在較大的針對(duì)某個(gè)業(yè)務(wù)過(guò)程事件的分析指標(biāo)需求,可以考慮基于某一個(gè)事件過(guò)程構(gòu)建事務(wù)型事實(shí)表。
● 事務(wù)型事實(shí)表一般選用事件發(fā)生日期或時(shí)間作為分區(qū)字段,這種分區(qū)方式可以方便下游的作業(yè)數(shù)據(jù)掃描執(zhí)行分區(qū)裁剪。
● 明細(xì)層事實(shí)表的冗余子集的原則能有利于降低上層數(shù)據(jù)訪問(wèn)的IO開銷。
● 明細(xì)層事實(shí)表維度退化到事實(shí)表原則能有利于減少上層數(shù)據(jù)訪問(wèn)的JOIN成本。
周期快照事實(shí)表
周期快照事實(shí)表以具有規(guī)律性的、可預(yù)見的時(shí)間間隔記錄事實(shí)。周期快照事實(shí)表主要用于分析狀態(tài)型或者存量型事實(shí)。快照是指以預(yù)定的時(shí)間間隔來(lái)采樣狀態(tài)度量。
累計(jì)快照事實(shí)表
累積快照事實(shí)表用來(lái)表述過(guò)程開始和結(jié)束之間的關(guān)鍵步驟事件,覆蓋過(guò)程的整個(gè)生命周期,通常具有多個(gè)日期字段來(lái)記錄關(guān)鍵時(shí)間點(diǎn)。當(dāng)累積快照事實(shí)表隨著生命周期不斷變化時(shí),記錄也會(huì)隨著過(guò)程的變化而被修改。
累計(jì)快照事實(shí)表是基于多個(gè)業(yè)務(wù)過(guò)程聯(lián)合分析從而構(gòu)建的事實(shí)表。例如如采購(gòu)單的流轉(zhuǎn)環(huán)節(jié)等。
累計(jì)快照事實(shí)表主要用于分析事件之間的時(shí)間間隔與周期。例如,用交易的支付與發(fā)貨之間的間隔,來(lái)分析發(fā)貨速度,或在支付和退款環(huán)節(jié)分析支付退款率等等。
累計(jì)快照事實(shí)表同時(shí)也可以用于幫助分析一些少量的、且對(duì)刷新時(shí)間不是非常敏感的指標(biāo)統(tǒng)計(jì)。例如,在當(dāng)前事務(wù)型事實(shí)表不支持,且只有少量的統(tǒng)計(jì)指標(biāo)時(shí),需要分析交易的關(guān)閉和發(fā)貨,就可以基于累計(jì)快照事實(shí)表進(jìn)行計(jì)算。
2.3.1、明細(xì)粒度事實(shí)表設(shè)計(jì)
明細(xì)粒度事實(shí)表設(shè)計(jì)如下所示:
● 通常,一個(gè)明細(xì)粒度事實(shí)表僅和一個(gè)維度關(guān)聯(lián)。
● 盡可能包含所有與業(yè)務(wù)過(guò)程相關(guān)的事實(shí) 。
● 只選擇與業(yè)務(wù)過(guò)程相關(guān)的事實(shí)。
● 分解不可加性事實(shí)為可加的組件。
● 在選擇維度和事實(shí)之前必須先聲明粒度。
● 在同一個(gè)事實(shí)表中不能有多種不同粒度的事實(shí)。
● 事實(shí)的單位要保持一致。
● 謹(jǐn)慎處理Null值。
● 使用退化維度提高事實(shí)表的易用性。
明細(xì)粒度事實(shí)表整體設(shè)計(jì)流程如下圖所示。
在一致性度量中已定義好了交易業(yè)務(wù)過(guò)程及其度量。明細(xì)事實(shí)表注意針對(duì)業(yè)務(wù)過(guò)程進(jìn)行模型設(shè)計(jì)。明細(xì)事實(shí)表的設(shè)計(jì)可以分為四個(gè)步驟:選擇業(yè)務(wù)過(guò)程、確定粒度、選擇維度、確定事實(shí)(度量)。粒度主要是在維度未展開的情況下記錄業(yè)務(wù)活動(dòng)的語(yǔ)義描述。在您建設(shè)明細(xì)事實(shí)表時(shí),需要選擇基于現(xiàn)有的表進(jìn)行明細(xì)層數(shù)據(jù)的開發(fā),清楚所建表記錄存儲(chǔ)的是什么粒度的數(shù)據(jù)。
2.3.2、建表示例
本次示例DWD層主要由三個(gè)表構(gòu)成:
● 交易商品信息事實(shí)表:dwd_asale_trd_itm_di。
● 交易會(huì)員信息事實(shí)表:ods_asale_trd_mbr_di。
● 交易訂單信息事實(shí)表:dwd_asale_trd_ord_di。
充分使用了維度退化以提升查詢效率,建表語(yǔ)句如下所示。
CREATE TABLE IF NOT EXISTS dwd_asale_trd_itm_di
(
item_id BIGINT COMMENT '商品ID',
item_title STRING COMMENT '商品名稱',
item_price DOUBLE COMMENT '商品價(jià)格',
item_stuff_status BIGINT COMMENT '商品新舊程度_0全新1閑置2二手',
item_prov STRING COMMENT '商品省份',
item_city STRING COMMENT '商品城市',
cate_id BIGINT COMMENT '商品類目ID',
cate_name STRING COMMENT '商品類目名稱',
commodity_id BIGINT COMMENT '品類ID',
commodity_name STRING COMMENT '品類名稱',
buyer_id BIGINT COMMENT '買家ID'
)
COMMENT '交易商品信息事實(shí)表'
PARTITIONED BY (ds STRING COMMENT '日期')
LIFECYCLE 400;
CREATE TABLE IF NOT EXISTS ods_asale_trd_mbr_di
(
order_id BIGINT COMMENT '訂單ID',
bc_type STRING COMMENT '業(yè)務(wù)分類',
buyer_id BIGINT COMMENT '買家ID',
buyer_nick STRING COMMENT '買家昵稱',
buyer_star_id BIGINT COMMENT '買家星級(jí)ID',
seller_id BIGINT COMMENT '賣家ID',
seller_nick STRING COMMENT '賣家昵稱',
seller_star_id BIGINT COMMENT '賣家星級(jí)ID',
shop_id BIGINT COMMENT '店鋪ID',
shop_name STRING COMMENT '店鋪名稱'
)
COMMENT '交易會(huì)員信息事實(shí)表'
PARTITIONED BY (ds STRING COMMENT '日期')
LIFECYCLE 400;
CREATE TABLE IF NOT EXISTS dwd_asale_trd_ord_di
(
order_id BIGINT COMMENT '訂單ID',
pay_order_id BIGINT COMMENT '支付訂單ID',
pay_status BIGINT COMMENT '支付狀態(tài)_1未付款2已付款3已退款',
succ_time STRING COMMENT '訂單交易結(jié)束時(shí)間',
item_id BIGINT COMMENT '商品ID',
item_quantity BIGINT COMMENT '購(gòu)買數(shù)量',
confirm_paid_amt DOUBLE COMMENT '訂單已經(jīng)確認(rèn)收貨的金額',
logistics_id BIGINT COMMENT '物流訂單ID',
mord_prov STRING COMMENT '收貨人省份',
mord_city STRING COMMENT '收貨人城市',
mord_lgt_shipping BIGINT COMMENT '發(fā)貨方式_1平郵2快遞3EMS',
mord_address STRING COMMENT '收貨人地址',
mord_mobile_phone STRING COMMENT '收貨人手機(jī)號(hào)',
mord_fullname STRING COMMENT '收貨人姓名',
buyer_nick STRING COMMENT '買家昵稱',
buyer_id BIGINT COMMENT '買家ID'
)
COMMENT '交易訂單信息事實(shí)表'
PARTITIONED BY (ds STRING COMMENT '日期')
LIFECYCLE 400;
2.4、CDM匯總層(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)。
2.4.1、公共匯總事實(shí)表設(shè)計(jì)原則
聚集是指針對(duì)原始明細(xì)粒度的數(shù)據(jù)進(jìn)行匯總。DWS公共匯總層是面向分析對(duì)象的主題聚集建模。在本教程中,最終的分析目標(biāo)為:最近一天某個(gè)類目(例如:廚具)商品在各省的銷售總額、該類目Top10銷售額商品名稱、各省用戶購(gòu)買力分布。因此,我們可以以最終交易成功的商品、類目、買家等角度對(duì)最近一天的數(shù)據(jù)進(jìn)行匯總。
注意
● 聚集是不跨越事實(shí)的。聚集是針對(duì)原始星形模型進(jìn)行的匯總。為獲取和查詢與原始模型一致的結(jié)果,聚集的維度和度量必須與原始模型保持一致,因此聚集是不跨越事實(shí)的。
● 聚集會(huì)帶來(lái)查詢性能的提升,但聚集也會(huì)增加ETL維護(hù)的難度。當(dāng)子類目對(duì)應(yīng)的一級(jí)類目發(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)行分類聚集的抽象。數(shù)據(jù)域通常以業(yè)務(wù)過(guò)程進(jìn)行分類,例如交易統(tǒng)一劃到交易域下, 商品的新增、修改放到商品域下。
● 區(qū)分統(tǒng)計(jì)周期。在表的命名上要能說(shuō)明數(shù)據(jù)的統(tǒng)計(jì)周期,例如_1d表示最近1天,td表示截至當(dāng)天,nd表示最近N天。
舉例如下:
● dws_asale_trd_byr_subpay_1d(A電商公司買家粒度交易分階段付款一日匯總事實(shí)表)
● dws_asale_trd_byr_subpay_td(A電商公司買家粒度分階段付款截至當(dāng)日匯總表)
● dws_asale_trd_byr_cod_nd(A電商公司買家粒度貨到付款交易匯總事實(shí)表)
● dws_asale_itm_slr_td(A電商公司賣家粒度商品截至當(dāng)日存量匯總表)
● dws_asale_itm_slr_hh(A電商公司賣家粒度商品小時(shí)匯總表)—維度為小時(shí)
● dws_asale_itm_slr_mm(A電商公司賣家粒度商品分鐘匯總表)—維度為分鐘文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-634889.html
2.4.2、建表示例
滿足業(yè)務(wù)需求的DWS層建表語(yǔ)句如下。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-634889.html
CREATE TABLE IF NOT EXISTS dws_asale_trd_byr_ord_1d
(
buyer_id BIGINT COMMENT '買家ID',
buyer_nick STRING COMMENT '買家昵稱',
mord_prov STRING COMMENT '收貨人省份',
cate_id BIGINT COMMENT '商品類目ID',
cate_name STRING COMMENT '商品類目名稱',
confirm_paid_amt_sum_1d DOUBLE COMMENT '最近一天訂單已經(jīng)確認(rèn)收貨的金額總和'
)
COMMENT '買家粒度所有交易最近一天匯總事實(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 '商品名稱',
cate_id BIGINT COMMENT '商品類目ID',
cate_name STRING COMMENT '商品類目名稱',
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;
到了這里,關(guān)于數(shù)倉(cāng)架構(gòu)模型設(shè)計(jì)參考的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!