<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          阿里云DataWorks學(xué)習(xí)——數(shù)倉(cāng)架構(gòu)設(shè)計(jì)

          共 19098字,需瀏覽 39分鐘

           ·

          2021-05-14 06:23

          (一)技術(shù)架構(gòu)選型



          在數(shù)據(jù)模型設(shè)計(jì)之前,您需要首先完成技術(shù)架構(gòu)的選型。本教程中使用阿里云大數(shù)據(jù)產(chǎn)品MaxCompute配合DataWorks,完成整體的數(shù)據(jù)建模和研發(fā)流程。

          完整的技術(shù)架構(gòu)圖如下圖所示。其中,DataWorks的數(shù)據(jù)集成負(fù)責(zé)完成數(shù)據(jù)的采集和基本的ETL。MaxCompute作為整個(gè)大數(shù)據(jù)開發(fā)過程中的離線計(jì)算引擎。DataWorks則包括數(shù)據(jù)開發(fā)、數(shù)據(jù)質(zhì)量、數(shù)據(jù)安全、數(shù)據(jù)管理等在內(nèi)的一系列功能。



          (二)數(shù)倉(cāng)分層


          在阿里巴巴的數(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)過處理的原始數(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ù)過程作為建模驅(qū)動(dòng),基于每個(gè)具體的業(yè)務(wù)過程特點(diǎn),構(gòu)建最細(xì)粒度的明細(xì)層事實(shí)表。可以結(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)如下圖所示。


          在本教程中,從交易數(shù)據(jù)系統(tǒng)的數(shù)據(jù)經(jīng)過DataWorks數(shù)據(jù)集成,同步到數(shù)據(jù)倉(cāng)庫(kù)的ODS層。經(jīng)過數(shù)據(jù)開發(fā)形成事實(shí)寬表后,再以商品、地域等為維度進(jìn)行公共匯總。

          整體的數(shù)據(jù)流向如下圖所示。其中,ODS層到DIM層的ETL(萃取(Extract)、轉(zhuǎn)置(Transform)及加載(Load))處理是在MaxCompute中進(jìn)行的,處理完成后會(huì)同步到所有存儲(chǔ)系統(tǒng)。ODS層和DWD層會(huì)放在數(shù)據(jù)中間件中,供下游訂閱使用。而DWS層和ADS層的數(shù)據(jù)通常會(huì)落地到在線存儲(chǔ)系統(tǒng)中,下游通過接口調(diào)用的形式使用。






          (三)數(shù)據(jù)模型


          數(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)過長(zhǎng)時(shí)間累積,且訪問頻率很高,是面向應(yīng)用的數(shù)據(jù)。

          說明 在構(gòu)建MaxCompute數(shù)據(jù)倉(cāng)庫(kù)的表之前,您需要首先了解MaxCompute支持的數(shù)據(jù)類型版本說明。


          數(shù)據(jù)引入層表設(shè)計(jì)

          本教程中,在ODS層主要包括的數(shù)據(jù)有:交易系統(tǒng)訂單詳情、用戶信息詳情、商品詳情等。這些數(shù)據(jù)未經(jīng)處理,是最原始的數(shù)據(jù)。邏輯上,這些數(shù)據(jù)都是以二維表的形式存儲(chǔ)。雖然嚴(yán)格的說ODS層不屬于數(shù)倉(cāng)建模的范疇,但是合理的規(guī)劃ODS層并做好數(shù)據(jù)同步也非常重要。本教程中,使用了6張ODS表:

          • 記錄用于拍賣的商品信息:s_auction。

          • 記錄用于正常售賣的商品信息:s_sale。

          • 記錄用戶詳細(xì)信息:s_users_extra。

          • 記錄新增的商品成交訂單信息:s_biz_order_delta。

          • 記錄新增的物流訂單信息:s_logistics_order_delta。

          • 記錄新增的支付訂單信息:s_pay_order_delta。

          說明

          • 表或字段命名盡量和業(yè)務(wù)系統(tǒng)保持一致,但是需要通過額外的標(biāo)識(shí)來區(qū)分增量和全量表。例如,我們通過_delta來標(biāo)識(shí)該表為增量表。

          • 命名時(shí)需要特別注意沖突處理,例如不同業(yè)務(wù)系統(tǒng)的表可能是同一個(gè)名稱。為區(qū)分兩個(gè)不同的表,您可以將這兩個(gè)同名表的來源數(shù)據(jù)庫(kù)名稱作為后綴或前綴。例如,表中某些字段的名稱剛好和關(guān)鍵字重名了,可以通過添加_col1后綴解決。

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

          ODS層表命名、數(shù)據(jù)同步任務(wù)命名、數(shù)據(jù)產(chǎn)出及生命周期管理及數(shù)據(jù)質(zhì)量規(guī)范請(qǐng)參見ODS層設(shè)計(jì)規(guī)范。

          建表示例

          為方便您使用,集中提供建表語句如下。更多建表信息,請(qǐng)參見表操作。

          CREATE TABLE IF NOT EXISTS s_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 s_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 s_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 s_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 s_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 s_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;

          數(shù)據(jù)引入層存儲(chǔ)

          為了滿足歷史數(shù)據(jù)分析需求,您可以在ODS層表中添加時(shí)間維度作為分區(qū)字段。實(shí)際應(yīng)用中,您可以選擇采用增量、全量存儲(chǔ)或拉鏈存儲(chǔ)的方式。

          • 增量存儲(chǔ)

            以天為單位的增量存儲(chǔ),以業(yè)務(wù)日期作為分區(qū),每個(gè)分區(qū)存放日增量的業(yè)務(wù)數(shù)據(jù)。舉例如下:

            說明 交易、日志等事務(wù)性較強(qiáng)的ODS表適合增量存儲(chǔ)方式。這類表數(shù)據(jù)量較大,采用全量存儲(chǔ)的方式存儲(chǔ)成本壓力大。此外,這類表的下游應(yīng)用對(duì)于歷史全量數(shù)據(jù)訪問的需求較小(此類需求可通過數(shù)據(jù)倉(cāng)庫(kù)后續(xù)匯總后得到)。例如,日志類ODS表沒有數(shù)據(jù)更新的業(yè)務(wù)過程,因此所有增量分區(qū)UNION在一起就是一份全量數(shù)據(jù)。

            • 1月1日,用戶A訪問了A公司電商店鋪B,A公司電商日志產(chǎn)生一條記錄t1。1月2日,用戶A又訪問了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ū)中。

          • 全量存儲(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記錄。

            說明 對(duì)于小數(shù)據(jù)量的緩慢變化維度數(shù)據(jù),例如商品類目,可直接使用全量存儲(chǔ)。

          • 拉鏈存儲(chǔ)

            拉鏈存儲(chǔ)通過新增兩個(gè)時(shí)間戳字段(start_dt和end_dt),將所有以天為粒度的變更數(shù)據(jù)都記錄下來,通常分區(qū)字段也是這兩個(gè)時(shí)間戳字段。

            拉鏈存儲(chǔ)舉例如下。


            商品start_dtend_dt賣家狀態(tài)
            B2016010120160102A上架
            C2016010130001231A上架
            B2016010230001231A下架

            這樣,下游應(yīng)用可以通過限制時(shí)間戳字段來獲取歷史數(shù)據(jù)。例如,用戶訪問1月1日數(shù)據(jù),只需限制start_dt<=20160101并且 end_dt>20160101

          緩慢變化維度

          MaxCompute不推薦使用代理鍵,推薦使用自然鍵作為維度主鍵,主要原因有兩點(diǎn):

          1. MaxCompute是分布式計(jì)算引擎,生成全局唯一的代理鍵工作量非常大。當(dāng)遇到大數(shù)據(jù)量情況下,這項(xiàng)工作就會(huì)更加復(fù)雜,且沒有必要。

          2. 使用代理鍵會(huì)增加ETL的復(fù)雜性,從而增加ETL任務(wù)的開發(fā)和維護(hù)成本。

          在不使用代理鍵的情況下,緩慢變化維度可以通過快照方式處理。

          快照方式下數(shù)據(jù)的計(jì)算周期通常為每天一次。基于該周期,處理維度變化的方式為每天一份全量快照。

          例如商品維度,每天保留一份全量商品快照數(shù)據(jù)。任意一天的事實(shí)表均可以取到當(dāng)天的商品信息,也可以取到最新的商品信息,通過限定日期,采用自然鍵進(jìn)行關(guān)聯(lián)即可。該方式的優(yōu)勢(shì)主要有以下兩點(diǎn):

          • 處理緩慢變化維度的方式簡(jiǎn)單有效,開發(fā)和維護(hù)成本低。

          • 使用方便,易于理解。數(shù)據(jù)使用方只需要限定日期即可取到當(dāng)天的快照數(shù)據(jù)。任意一天的事實(shí)快照與任意一天的維度快照通過維度的自然鍵進(jìn)行關(guān)聯(lián)即可。

          該方法的弊端主要是存儲(chǔ)空間的極大浪費(fèi)。例如某維度每天的變化量占總體數(shù)據(jù)量比例很低,極端情況下,每天無變化,這種情況下存儲(chǔ)浪費(fèi)嚴(yán)重。該方法主要實(shí)現(xiàn)了通過犧牲存儲(chǔ)獲取ETL效率的優(yōu)化和邏輯上的簡(jiǎn)化。請(qǐng)避免過度使用該方法,且必須要有對(duì)應(yīng)的數(shù)據(jù)生命周期制度,清除無用的歷史數(shù)據(jù)。

          數(shù)據(jù)同步加載與處理

          ODS的數(shù)據(jù)需要由各數(shù)據(jù)源系統(tǒng)同步到MaxCompute,才能用于進(jìn)一步的數(shù)據(jù)開發(fā)。本教程建議您使用DataWorks數(shù)據(jù)集成功能完成數(shù)據(jù)同步,詳情請(qǐng)參見概述。在使用數(shù)據(jù)集成的過程中,建議您遵循以下規(guī)范:

          • 一個(gè)系統(tǒng)的源表只允許同步到MaxCompute一次,保持表結(jié)構(gòu)的一致性。

          • 數(shù)據(jù)集成僅用于離線全量數(shù)據(jù)同步,實(shí)時(shí)增量數(shù)據(jù)同步需要您使用數(shù)據(jù)傳輸服務(wù)DTS實(shí)現(xiàn),詳情請(qǐng)參見數(shù)據(jù)傳輸服務(wù)DTS。

          • 數(shù)據(jù)集成全量同步的數(shù)據(jù)直接進(jìn)入全量表的當(dāng)日分區(qū)。

          • ODS層的表建議以統(tǒng)計(jì)日期及時(shí)間分區(qū)表的方式存儲(chǔ),便于管理數(shù)據(jù)的存儲(chǔ)成本和策略控制。

          • 數(shù)據(jù)集成可以自適應(yīng)處理源系統(tǒng)字段的變更:

            • 如果源系統(tǒng)字段的目標(biāo)表在MaxCompute上不存在,可以由數(shù)據(jù)集成自動(dòng)添加不存在的表字段。

            • 如果目標(biāo)表的字段在源系統(tǒng)不存在,數(shù)據(jù)集成填充NULL。


          公共維度匯總層(DIM)



          公共維度匯總層(DIM)基于維度建模理念,建立整個(gè)企業(yè)的一致性維度。

          公共維度匯總層(DIM)主要由維度表(維表)構(gòu)成。維度是邏輯概念,是衡量和觀察業(yè)務(wù)的角度。維表是根據(jù)維度及其屬性將數(shù)據(jù)平臺(tái)上構(gòu)建的表物理化的表,采用寬表設(shè)計(jì)的原則。因此,構(gòu)建公共維度匯總層(DIM)首先需要定義維度。


          定義維度

          在劃分?jǐn)?shù)據(jù)域、構(gòu)建總線矩陣時(shí),需要結(jié)合對(duì)業(yè)務(wù)過程的分析定義維度。以本教程中A電商公司的營(yíng)銷業(yè)務(wù)板塊為例,在交易數(shù)據(jù)域中,我們重點(diǎn)考察確認(rèn)收貨(交易成功)的業(yè)務(wù)過程。

          在確認(rèn)收貨的業(yè)務(wù)過程中,主要有商品和收貨地點(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ù)過程所傳達(dá)的信息都是一致的。

          設(shè)計(jì)維表

          完成維度定義后,您就可以對(duì)維度進(jìn)行補(bǔ)充,進(jìn)而生成維表了。維表的設(shè)計(jì)需要注意:

          • 建議維表單表信息不超過1000萬條。

          • 維表與其他表進(jìn)行Join時(shí),建議您使用Map Join。

          • 避免過于頻繁的更新維表的數(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è)維表存在大量屬性不被使用,或由于承載過多屬性字段導(dǎo)致查詢變慢,則需考慮對(duì)字段進(jìn)行拆分,創(chuàng)建多個(gè)維表。

          • 是否需要水平拆分。如果記錄之間有明顯的界限,可以考慮拆成多個(gè)表或設(shè)計(jì)成多級(jí)分區(qū)。

          • 核心的維表產(chǎn)出時(shí)間通常有嚴(yán)格的要求。

          設(shè)計(jì)維表的主要步驟如下:

          1. 完成維度的初步定義,并保證維度的一致性。

          2. 確定主維表(中心事實(shí)表,本教程中采用星型模型)。此處的主維表通常是數(shù)據(jù)引入層(ODS)表,直接與業(yè)務(wù)系統(tǒng)同步。例如,s_auction是與前臺(tái)商品中心系統(tǒng)同步的商品表,此表即是主維表。

          3. 確定相關(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)系。

          4. 確定維度屬性,主要包括兩個(gè)階段。第一個(gè)階段是從主維表中選擇維度屬性或生成新的維度屬性;第二個(gè)階段是從相關(guān)維表中選擇維度屬性或生成新的維度屬性。以商品維度為例,從主維表(s_auction)和類目 、賣家、店鋪等相關(guān)維表中選擇維度屬性或生成新的維度屬性。

            • 盡可能生成豐富的維度屬性。

            • 盡可能多地給出富有意義的文字性描述。

            • 區(qū)分?jǐn)?shù)值型屬性和事實(shí)。

            • 盡量沉淀出通用的維度屬性。

          公共維度匯總層(DIM)維表規(guī)范

          公共維度匯總層(DIM)維表命名規(guī)范:dim_{業(yè)務(wù)板塊名稱/pub}_{維度定義}[_{自定義命名標(biāo)簽}],所謂pub是與具體業(yè)務(wù)板塊無關(guān)或各個(gè)業(yè)務(wù)板塊都可公用的維度,如時(shí)間維度。舉例如下:

          • 公共區(qū)域維表dim_pub_area

          • A公司電商板塊的商品全量表dim_asale_itm

          建表示例

          本例中,最終的維表建表語句如下所示。

          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;

          明細(xì)粒度事實(shí)層(DWD)


          明細(xì)粒度事實(shí)層以業(yè)務(wù)過程驅(qū)動(dòng)建模,基于每個(gè)具體的業(yè)務(wù)過程特點(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ù)過程來設(shè)計(jì)。通過獲取描述業(yè)務(wù)過程的度量來描述業(yè)務(wù)過程,包括引用的維度和與業(yè)務(wù)過程有關(guān)的度量。度量通常為數(shù)值型數(shù)據(jù),作為事實(shí)邏輯表的依據(jù)。事實(shí)邏輯表的描述信息是事實(shí)屬性,事實(shí)屬性中的外鍵字段通過對(duì)應(yīng)維度進(jìn)行關(guān)聯(lián)。

          事實(shí)表中一條記錄所表達(dá)的業(yè)務(wù)細(xì)節(jié)程度被稱為粒度。通常粒度可以通過兩種方式來表述:一種是維度屬性組合所表示的細(xì)節(jié)程度,一種是所表示的具體業(yè)務(wù)含義。

          作為度量業(yè)務(wù)過程的事實(shí),通常為整型或浮點(diǎn)型的十進(jìn)制數(shù)值,有可加性、半可加性和不可加性三種類型:

          • 可加性事實(shí)是指可以按照與事實(shí)表關(guān)聯(lián)的任意維度進(jìn)行匯總。

          • 半可加性事實(shí)只能按照特定維度匯總,不能對(duì)所有維度匯總。例如庫(kù)存可以按照地點(diǎn)和商品進(jìn)行匯總,而按時(shí)間維度把一年中每個(gè)月的庫(kù)存累加則毫無意義。

          • 完全不可加性,例如比率型事實(shí)。對(duì)于不可加性的事實(shí),可分解為可加的組件來實(shí)現(xiàn)聚集。

          事實(shí)表相對(duì)維表通常更加細(xì)長(zhǎng),行增加速度也更快。維度屬性可以存儲(chǔ)到事實(shí)表中,這種存儲(chǔ)到事實(shí)表中的維度列稱為維度退化,可加快查詢速度。與其他存儲(chǔ)在維表中的維度一樣,維度退化可以用來進(jìn)行事實(shí)表的過濾查詢、實(shí)現(xiàn)聚合操作等。

          明細(xì)粒度事實(shí)層(DWD)通常分為三種:事務(wù)事實(shí)表、周期快照事實(shí)表和累積快照事實(shí)表,詳情請(qǐng)參見數(shù)倉(cāng)建設(shè)指南

          • 事務(wù)事實(shí)表用來描述業(yè)務(wù)過程,跟蹤空間或時(shí)間上某點(diǎn)的度量事件,保存的是最原子的數(shù)據(jù),也稱為原子事實(shí)表。

          • 周期快照事實(shí)表以具有規(guī)律性的、可預(yù)見的時(shí)間間隔記錄事實(shí)。

          • 累積快照事實(shí)表用來表述過程開始和結(jié)束之間的關(guān)鍵步驟事件,覆蓋過程的整個(gè)生命周期,通常具有多個(gè)日期字段來記錄關(guān)鍵時(shí)間點(diǎn)。當(dāng)累積快照事實(shí)表隨著生命周期不斷變化時(shí),記錄也會(huì)隨著過程的變化而被修改。

          明細(xì)粒度事實(shí)表設(shè)計(jì)原則

          明細(xì)粒度事實(shí)表設(shè)計(jì)原則如下所示:

          • 通常,一個(gè)明細(xì)粒度事實(shí)表僅和一個(gè)維度關(guān)聯(lián)。

          • 盡可能包含所有與業(yè)務(wù)過程相關(guān)的事實(shí) 。

          • 只選擇與業(yè)務(wù)過程相關(guān)的事實(shí)。

          • 分解不可加性事實(shí)為可加的組件。

          • 在選擇維度和事實(shí)之前必須先聲明粒度。

          • 在同一個(gè)事實(shí)表中不能有多種不同粒度的事實(shí)。

          • 事實(shí)的單位要保持一致。

          • 謹(jǐn)慎處理Null值。

          • 使用退化維度提高事實(shí)表的易用性。

          明細(xì)粒度事實(shí)表整體設(shè)計(jì)流程如下圖所示。

          在一致性度量中已定義好了交易業(yè)務(wù)過程及其度量。明細(xì)事實(shí)表注意針對(duì)業(yè)務(wù)過程進(jìn)行模型設(shè)計(jì)。明細(xì)事實(shí)表的設(shè)計(jì)可以分為四個(gè)步驟:選擇業(yè)務(wù)過程、確定粒度、選擇維度、確定事實(shí)(度量)。粒度主要是在維度未展開的情況下記錄業(yè)務(wù)活動(dòng)的語義描述。在您建設(shè)明細(xì)事實(shí)表時(shí),需要選擇基于現(xiàn)有的表進(jìn)行明細(xì)層數(shù)據(jù)的開發(fā),清楚所建表記錄存儲(chǔ)的是什么粒度的數(shù)據(jù)。

          明細(xì)粒度事實(shí)層(DWD)規(guī)范

          通常您需要遵照的命名規(guī)范為:dwd_{業(yè)務(wù)板塊/pub}_{數(shù)據(jù)域縮寫}_{業(yè)務(wù)過程縮寫}[_{自定義表命名標(biāo)簽縮寫}] _{單分區(qū)增量全量標(biāo)識(shí)},pub表示數(shù)據(jù)包括多個(gè)業(yè)務(wù)板塊的數(shù)據(jù)。單分區(qū)增量全量標(biāo)識(shí)通常為:i表示增量,f表示全量。例如:dwd_asale_trd_ordcrt_trip_di(A電商公司航旅機(jī)票訂單下單事實(shí)表,日刷新增量)及dwd_asale_itm_item_df(A電商商品快照事實(shí)表,日刷新全量)。

          本教程中,DWD層主要由三個(gè)表構(gòu)成:

          • 交易商品信息事實(shí)表:dwd_asale_trd_itm_di。

          • 交易會(huì)員信息事實(shí)表:ods_asale_trd_mbr_di。

          • 交易訂單信息事實(shí)表:dwd_asale_trd_ord_di。

          DWD層數(shù)據(jù)存儲(chǔ)及生命周期管理規(guī)范請(qǐng)參見CDM明細(xì)層設(shè)計(jì)規(guī)范。

          建表示例

          本教程中充分使用了維度退化以提升查詢效率,建表語句如下所示。

          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;

          公共匯總粒度事實(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è)類目(例如:廚具)商品在各省的銷售總額、該類目Top10銷售額商品名稱、各省用戶購(gòu)買力分布。因此,我們可以以最終交易成功的商品、類目、買家等角度對(duì)最近一天的數(shù)據(jù)進(jìn)行匯總。

          注意

          • 聚集是不跨越事實(shí)的。聚集是針對(duì)原始星形模型進(jìn)行的匯總。為獲取和查詢與原始模型一致的結(jié)果,聚集的維度和度量必須與原始模型保持一致,因此聚集是不跨越事實(shí)的。

          • 聚集會(huì)帶來查詢性能的提升,但聚集也會(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)過匯總沉淀到聚集表中。

          • 不跨數(shù)據(jù)域。數(shù)據(jù)域是在較高層次上對(duì)數(shù)據(jù)進(jìn)行分類聚集的抽象。數(shù)據(jù)域通常以業(yè)務(wù)過程進(jìn)行分類,例如交易統(tǒng)一劃到交易域下, 商品的新增、修改放到商品域下。

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

          公共匯總事實(shí)表規(guī)范

          公共匯總事實(shí)表命名規(guī)范:dws_{業(yè)務(wù)板塊縮寫/pub}_{數(shù)據(jù)域縮寫}_{數(shù)據(jù)粒度縮寫}[_{自定義表命名標(biāo)簽縮寫}]_{統(tǒng)計(jì)時(shí)間周期范圍縮寫}。

          • 關(guān)于統(tǒng)計(jì)實(shí)際周期范圍縮寫,缺省情況下,離線計(jì)算應(yīng)該包括最近一天(_1d),最近N天(_nd)和歷史截至當(dāng)天(_td)三個(gè)表。如果出現(xiàn)_nd的表字段過多需要拆分時(shí),只允許以一個(gè)統(tǒng)計(jì)周期單元作為原子拆分。即一個(gè)統(tǒng)計(jì)周期拆分一個(gè)表,例如最近7天(_1w)拆分一個(gè)表。不允許拆分出來的一個(gè)表存儲(chǔ)多個(gè)統(tǒng)計(jì)周期。

          • 對(duì)于小時(shí)表(無論是天刷新還是小時(shí)刷新),都用_hh 來表示。

          • 對(duì)于分鐘表(無論是天刷新還是小時(shí)刷新),都用_mm來表示。

          舉例如下:

          • 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電商公司賣家粒度商品分鐘匯總表)---維度為分鐘

          DWS層數(shù)據(jù)存儲(chǔ)及生命周期管理規(guī)范請(qǐng)參見CDM匯總層設(shè)計(jì)規(guī)范。

          建表示例

          滿足業(yè)務(wù)需求的DWS層建表語句如下。

          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;

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



          在完成數(shù)據(jù)倉(cāng)庫(kù)的分層后,您需要對(duì)各層次的數(shù)據(jù)之間的調(diào)用關(guān)系作出約定。

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

          ADS應(yīng)用層優(yōu)先調(diào)用數(shù)據(jù)倉(cāng)庫(kù)公共層數(shù)據(jù)。如果已經(jīng)存在CDM層數(shù)據(jù),不允許ADS應(yīng)用層跨過CDM中間層從ODS層重復(fù)加工數(shù)據(jù)。CDM中間層應(yīng)該積極了解應(yīng)用層數(shù)據(jù)的建設(shè)需求,將公用的數(shù)據(jù)沉淀到公共層,為其他數(shù)據(jù)層次提供數(shù)據(jù)服務(wù)。同時(shí),ADS應(yīng)用層也需積極配合CDM中間層進(jìn)行持續(xù)的數(shù)據(jù)公共建設(shè)的改造。避免出現(xiàn)過度的ODS層引用、不合理的數(shù)據(jù)復(fù)制和子集合冗余。總體遵循的層次調(diào)用原則如下:

          • ODS層數(shù)據(jù)不能直接被應(yīng)用層任務(wù)引用。如果中間層沒有沉淀的ODS層數(shù)據(jù),則通過CDM層的視圖訪問。CDM層視圖必須使用調(diào)度程序進(jìn)行封裝,保持視圖的可維護(hù)性與可管理性。

          • CDM層任務(wù)的深度不宜過大(建議不超過10層)。

          • 一個(gè)計(jì)算刷新任務(wù)只允許一個(gè)輸出表,特殊情況除外。

          • 如果多個(gè)任務(wù)刷新輸出一個(gè)表(不同任務(wù)插入不同的分區(qū)),DataWorks上需要建立一個(gè)虛擬任務(wù),依賴多個(gè)任務(wù)的刷新和輸出。通常,下游應(yīng)該依賴此虛擬任務(wù)。

          • CDM匯總層優(yōu)先調(diào)用CDM明細(xì)層,可累加指標(biāo)計(jì)算。CDM匯總層盡量?jī)?yōu)先調(diào)用已經(jīng)產(chǎn)出的粗粒度匯總層,避免大量匯總層數(shù)據(jù)直接從海量的明細(xì)數(shù)據(jù)層中計(jì)算得出。

          • CDM明細(xì)層累計(jì)快照事實(shí)表優(yōu)先調(diào)用CDM事務(wù)型事實(shí)表,保持?jǐn)?shù)據(jù)的一致性產(chǎn)出。

          • 有針對(duì)性地建設(shè)CDM公共匯總層,避免應(yīng)用層過度引用和依賴CDM層明細(xì)數(shù)據(jù)。

          瀏覽 42
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人看人人摸人人爱 | 一级大片免费看 | 国产一级a毛一级a做免费高清视频 | 九色激情网| 怡红院一区 |