完成需求階段的工作后,數據產品經理會產出最終版本的產品需求文檔,以供設計人員進行設計工作。
設計工作包含數據探查和系分設計兩部分:
數據探查旨在了解來源數據的數據形態(tài),例如數據質量、數據分布等。結合業(yè)務場景,幫助分析和判斷需求實現(xiàn)的可行性以及找出潛在的數據問題和風險。
系分設計則包括表設計、Mapping設計和調度設計等最實際的設計工作。
設計完畢后,最終將產出供開發(fā)人員參照實施開發(fā)的ETL設計文檔、數據探查文檔、調度設計文檔,為需求的有效實現(xiàn)打下堅實基礎。
設計階段的流程包括以下步驟:
數據探查
數據探查的目的是了解數據的形態(tài),找到潛在問題與風險。數據探查是決定數據可靠性的關鍵步驟。數據探查報告可以為后續(xù)開發(fā)提供指導,并作為依據制定開發(fā)計劃。
數據探查的內容主要包括但不限于以下內容:
源表數據主鍵字段重復數。
源表字段空值/異常值的統(tǒng)計數。
源表之間關聯(lián)關系。
源表字段的數據格式。
源表增量規(guī)則。
探查完成后,最終產出數據探查報告。如果發(fā)現(xiàn)當前數據無法支撐需求的實現(xiàn),則要將需求退回給數據產品經理,由數據產品經理發(fā)起迭代需求流程。
系分設計
系分設計包括表設計、Mapping設計和調度設計三部分。
表設計
表設計是指依據需求設計目標產出表、中間產出表。包含表名、表名解釋、字段名、字段類型、字段注釋以及字段安全等級等。表設計的步驟如下所示:
設計表名、字段名:要求相同的字段在不同表中的字段名相同,相關規(guī)范請參見命名規(guī)范。
設計主鍵和外鍵。
設計字段注釋:通過標注字段注釋、枚舉值來表明字段含義,如果枚舉值過多,建議為枚舉值創(chuàng)建維表。
設計表分區(qū):建議所有表都創(chuàng)建為分區(qū)表。
設計數據生命周期。
企業(yè)應根據自身實際情況來進行設置,也可以參考如下數值:
數倉分層
說明
ODS層
非去重數據:默認不保留。
ETL臨時表:保留14日。
鏡像全量表:重要數據建議采用極限存儲。
流水全量表:如果不可再生,則永久保存。
DWD層
維度表:按日分區(qū)的極限存儲模式。
事實表:按日分區(qū)且永久保留。
周期性快照事實表:采用極限存儲或根據自身情況設置生命周期。
DWS層
匯總指標:自行選擇保留月初、特定日期數據。
設計加密技術:根據實際情況對敏感字段設計加密方案。
Mapping設計
Mapping設計采用圖形化或偽代碼的形式編寫規(guī)劃以下內容:
每個字段的生成邏輯。
表與表之間的關系。
目標字段與原字段間的算法邏輯。
將上述內容產出為ETL文檔留存,ETL將作為后續(xù)開發(fā)流程的第一參考依據。
調度設計
依賴設計
將ETL抽象為多個相互依賴的代碼節(jié)點形成上下游依賴關系,要求如下:
一個節(jié)點僅產出一張表,一張表僅由一個節(jié)點產出。
下游節(jié)點的輸入數據來自于上游節(jié)點的產出數據。
多并行、少串行(在分布式系統(tǒng)下可發(fā)揮其優(yōu)勢)。
運行周期
如果數據研發(fā)的場景是在常見T+1離線計算場景,則應將不同調度任務按照實際業(yè)務需求,賦予小時、日、周、月和季度等不同的調度粒度。
說明程序必須支持重跑。
如果SQL語句優(yōu)化后,單次執(zhí)行仍超過30分鐘,建議拆表重新設計,建議每個節(jié)點運行時長不超過1小時。
設置基線:在傳統(tǒng)T+1(每日計算的是前一日產生的業(yè)務數據)的場景下,數據理應在第二天某個時間點按時產出以支撐BI或其他應用場景,因此應設置如下基線報警策略。詳情請參見基線管理。
最終產出任務基線:規(guī)定產出最終數據的任務必須在公司規(guī)定的X點X分完成,否則視為破線(同時推送相應報警)。
中間任務報警:產出最終數據的任務的上游任務應穩(wěn)定、按時運行完成。如果出現(xiàn)出錯、變慢(運行時間明顯長于歷史過往平均運行時間)等可能影響最終任務完成時間的事件,則應第一時間推送報警給第一任務責任人。
設置優(yōu)先級:基于有限的計算資源來設置任務優(yōu)先級,以保證在已有資源被充分調配利用的情況下,可以按照順序產出數據,保證重要任務的準時產出。調度設計完成后,需要產出調度設計文檔。
數據流設計
ETL過程中,數據流向有如下限制:
數據流向僅支持由低到高,即ODS->DWD->DWS->ADS。
數據不能跨層引用、逆向引用。
DWS層不同集市的數據不能相互引用,必須沉淀到DWD層。