《新興數據湖倉設計與實踐手冊·從分層架構到數據湖倉架構設計(2025 年)》 系列文章將聚焦從數據倉庫分層到數據湖倉架構的設計與實踐。手冊將闡述數據倉庫分層的核心價值、常見分層類型,詳解分層下的 ETL 架構及數據轉換環節,介紹數據倉庫分層對應的技術架構,並以貼源層(ODS)、數據倉庫層(DW)、數據服務層(DWS)為例,深入剖析數湖倉分層設計,最後探討數據倉庫技術趨勢並進行小結。
本文為系列文章末篇,將詳細剖析數據倉庫分層下的數據服務層和數據應用層設計,並對當下湖倉技術以及未來技術趨勢進行系統的總結。
👉上文回顧:《(一)從分層架構到數據湖倉架構:數據倉庫分層的概念與設計》 (二)從分層架構到數據湖倉架構:數據倉庫分層下的技術架構與舉例 (三)從分層架構到數據湖倉架構系列:數據倉庫分層之貼源層和數據倉庫層設計
數據服務層設計(DWS,Data Warehouse Service)- 彙總層寬表
數據服務層(DWS)是基於數據明細層(DWD)構建的彙總層,面向特定業務主題,以寬表形式組織數據,支持分析和業務查詢。該層的數據根據不同的主題和分析需求,通過對明細數據進行輕度聚合而成,減少維度數量,以便進行快速、高效的查詢。
設計理念與結構
DWS層通過將DWD層的明細數據按主題域(如訂單、用户、商品)進行彙總,為分析場景提供預處理的數據支持。數據粒度由細粒度提升至彙總粒度,以更適合多場景的業務查詢需求。例如,按交易來源或類型對交易數據進行彙總,可以快速生成每天各主題的行為統計,如商品復購率、用户活躍度等。
特點和用途
- 面向主題:DWS層按業務主題劃分數據,如銷售、庫存、客户等,生成覆蓋多個指標的寬表。每張寬表通常包含較多字段,支持複雜的業務分析與數據分發。
- 少表寬表設計:DWS層表數量相對較少,每張寬表涵蓋多個業務內容,減少表關聯,提升OLAP分析和查詢性能。
- 一致性整合:通過整合多箇中間層數據(如DWD層),形成一致的企業級彙總事實表(如用户事實表、渠道事實表、終端事實表等),保證數據口徑的一致性。
數據聚合與彙總示例
- 按天輕度彙總:基於DWD數據,對各主題對象(如購買行為)按天進行統計。例如,統計某商品的日復購率或銷售額,方便後續的時間序列分析。
- 主題寬表示例:按照業務主題,生成具有較多字段的寬表,用於業務查詢、OLAP分析等。例如,dws_sales_summary寬表可包含銷售額、復購率、用户地域分佈等字段。
- 多層次分析:以不同維度進行彙總,如最近一天特定類目(如廚具)商品在各省的銷售總額,或者Top 10商品的銷售額,支持靈活的多維分析。
場景應用與效率提升
通過彙總層的預聚合,DWS層可以滿足80%的常見業務分析需求,減少直接查詢ODS層的計算壓力。例如,按7天、30天、90天等時間窗口的用户行為分析在DWS層中可以更加高效。
- 實時分析支持:對DWS層數據進行輕度彙總,有助於實現實時或準實時的用户畫像、銷售趨勢分析等需求。
- 典型分析場景:如用户在不同時間段登錄的IP及購買商品數量、各地區的購買力分佈等。這些分析支持業務決策和營銷策略調整。
命名和分區規範
- 表命名規範:建議DWS層表名以dws_主題_寬表描述命名,如dws_sales_summary或dws_user_activity.
- 分區設計:通常按天或周創建分區,便於時間序列查詢;若無時間屬性,則根據業務需求自定義分區字段。
通過DWS層的數據彙總與主題劃分,企業可以在彙總寬表的基礎上,迅速提取核心業務指標,為上層業務查詢、報表和OLAP分析提供高效、結構化的數據支持。
數據服務層(DWS)職責與設計原則
DWS層(數據彙總層)基於DWD層的明細數據,按業務主題對數據進行聚合,以寬表形式存儲,支持業務查詢、OLAP分析和數據分發。DWS層將多個DWD層表中分散的數據進行彙總,按主題整合到單一寬表中,例如用户、訂單、商品、物流等。每張寬表涵蓋相關主題的多個維度和指標字段,以滿足業務方的多維度分析需求。
DWS層的核心任務
- 主題彙總 將DWD層的明細數據按照業務主題進行聚合,創建單獨的寬表。例如,在“用户”主題下,用户註冊信息、收貨地址和徵信數據等內容可以整合到一張寬表中,方便後續的數據查詢和分析。
- 主題建模 針對特定業務主題,如流量、訂單、用户,構建數據模型,將相關數據從DWD層抽取並聚合。DWS層提供的寬表通常按時間分層,如按天、月彙總的流量會話、每日新增用户、每日活躍用户等。
- 維度彙總 提前將查詢需求中的常用維度數據進行聚合處理。例如,將營銷渠道、用户來源等維度數據提前整合,簡化後續的查詢邏輯。
設計規範
- 寬表設計 DWS層通常為每個主題提供1至3張寬表,寬表覆蓋多個業務指標,能夠滿足70%以上的業務需求。典型的寬表包括用户行為寬表、商品寬表、物流寬表和售後寬表等。其中,用户行為寬表是字段最豐富的,可能包含60至200個字段,以支持更全面的用户分析。
- 命名和分區規範
- 命名:DWS層表名以dws_開頭,後接業務主題和時間週期標識(如_1d代表每日彙總,_1w代表每週彙總)。
- 分區:通常按天或小時創建分區(如_hh表示小時分區),如無時間維度,則根據業務邏輯選擇分區字段。
- 示例命名:
- dws_asale_trd_byr_subpay_1d:按買家粒度的交易分階段付款每日彙總。
- dws_asale_trd_itm_slr_hh:按賣家粒度的商品小時彙總。
- 數據存儲 DWS層數據採用Impala內表和Parquet文件格式存儲,具備高效的查詢性能。一般以覆蓋舊錶的方式更新數據,定期生成歷史快照用於數據存檔和溯源分析。
典型的DWS寬表設計示例
- 用户維度寬表示例
| 列名 | 數據類型 | 註釋 |
|---|---|---|
| user_id | STRING | 用户ID |
| user_gender | STRING | 用户性別 |
| user_age | STRING | 用户年齡 |
| user_level | STRING | 用户等級 |
| buyer_nick | STRING | 買家暱稱 |
| mord_prov | STRING | 地址 |
| login_count | BIGINT | 當日登錄次數 |
| cart_count | BIGINT | 加入購物車次數 |
| order_count | BIGINT | 當日下單次數 |
| order_amount | DECIMAL(16, 2) | 當日下單金額 |
| payment_count | BIGINT | 當日支付次數 |
| payment_amount | DECIMAL(16, 2) | 當日支付金額 |
| confirm_paid_amt_sum_1d | DOUBLE | 最近一天訂單已確認收貨的金額總和 |
| order_detail_stats | ARRAY<STRUCT<sku_id:STRING, sku_num:BIGINT, order_count:BIGINT, order_amount:DECIMAL(20, 2)>> | 下單明細統計 |
表註釋:每日購買行為
分區字段:dt(STRING 類型)
存儲格式:PARQUET
存儲路徑:/warehouse/gmall/dws/dws_sale_detail_daycount/
表屬性:"parquet.compression" = "lzo"
- 商品維度寬表示例
| 列名 | 數據類型 | 註釋 |
|---|---|---|
| item_id | BIGINT | 商品ID |
| item_title | STRING | 商品名稱 |
| cate_id | BIGINT | 商品類目ID |
| cate_name | STRING | 商品類目名稱 |
| confirm_paid_amt_sum_1d | DOUBLE | 最近一天訂單已確認收貨的金額總和 |
表註釋:商品粒度交易最近一天彙總事實表
分區字段:ds(STRING 類型,註釋為“分區字段YYYYMMDD”)
生命週期:36000
DWS層的作用與數據集市的關係
DWS層通常被稱為數據集市層,因其按業務主題對數據進行預處理和彙總,形成可供業務直接使用的寬表。如果DWS層提供的數據直接用於業務應用,則其可以被視為數據集市。DWS層中的數據集市寬表適合業務用户查詢、生成報表、支持OLAP分析等。
DWS層是數據倉庫的重要組成部分,提供了一個結構化、按主題分層的數據視圖,通過提前彙總和聚合數據,DWS層有效降低了查詢和計算成本,是數據倉庫面向業務的核心數據服務層。
數據應用層設計(ADS,Application Data Store)
數據應用層(ADS)用於存儲個性化的統計指標和報表數據,為數據產品、業務應用和數據分析提供專門的數據支持。ADS層的數據是高度彙總或定製化的數據集,覆蓋流量、訂單、用户等主題,以寬表形式存儲,支持多維分析、查詢、數據分發等。該層的數據粒度通常較粗,涵蓋彙總數據和部分重要的明細數據,滿足用户對近期數據的分析需求。
ADS層的核心功能
- 應用場景定製 在DWS層基礎上,面向應用場景進一步聚合數據,生成高定製化的寬表(如用户行為、訂單趨勢)。這些數據可以直接供業務系統調用或導入至應用系統(如MySQL、Redis、Druid)中,用於前端展示、實時查詢和分析。
- 滿足部門需求 ADS層的數據按業務部門需求進行劃分,僅包含與部門分析相關的數據子集。例如,流量數據集市提供流量分析指標,用户數據集市提供活躍度、轉化率等用户行為數據,為業務方提供更直觀的分析數據。
- 數據集市和寬表支持 數據集市在ADS層按主題劃分,如流量、訂單、用户等,生成字段豐富的寬表。這些寬表彙總了各類業務指標和維度,支持多種分析需求,廣泛用於OLAP分析、KPI展示和業務監控。
數據生成和存儲方式
- 數據生成 ADS層的數據源於DWD和DWS層,按業務需求從這些基礎層數據中抽取並加工。ADS層表的數據更新頻率依賴於業務需求,可以是每日或每小時刷新。
- 存儲與分區 使用Impala內表和Parquet格式存儲ADS數據,按天或業務字段進行分區,以優化查詢效率。對於沒有時間屬性的表,根據具體業務選擇適當的分區字段。
- 表命名規範 庫名暫定為ads,表名格式建議為ads_主題_業務表名,按業務需求進行定製。
數據應用層示例
- 用户行為寬表 用於存儲用户的互動、消費等行為數據,包含各類用户活動信息,如評論、點贊、收藏、分享、GMV等字段。每張寬表大約包含60-200個字段,滿足多維度的用户分析需求。
| 列名 | 數據類型 | 註釋 |
|---|---|---|
| user_id | STRING | 用户ID |
| nickname | STRING | 用户暱稱 |
| register_date | STRING | 註冊日期 |
| register_from | STRING | 註冊來源 |
| remark | STRING | 細分渠道 |
| province | STRING | 註冊省份 |
| pl_cnt | BIGINT | 評論次數 |
| ds_cnt | BIGINT | 打賞次數 |
| sc_add | BIGINT | 添加收藏 |
| sc_cancel | BIGINT | 取消收藏 |
| gzg_add | BIGINT | 關注商品 |
| gzg_cancel | BIGINT | 取消關注商品 |
| zhi_cnt | BIGINT | 點贊次數 |
| share_cnts | BIGINT | 分享次數 |
| bl_cnt | BIGINT | 爆料數 |
| gmv_amount | BIGINT | 成交金額 |
| gmv_sales | BIGINT | 訂單數 |
分區字段:dt(STRING 類型)
存儲格式:PARQUET
- 商品銷售彙總表 彙總商品的銷售數據,按日或更細粒度進行存儲,為分析商品的銷售趨勢、庫存管理等提供支持。
| 列名 | 數據類型 | 註釋 |
|---|---|---|
| item_id | BIGINT | 商品ID |
| item_title | STRING | 商品名稱 |
| cate_id | BIGINT | 商品類目ID |
| confirm_paid_amt_sum_1d | DOUBLE | 訂單確認收貨的金額總和 |
| 分區字段 | ds (STRING) | 分區字段 YYYYMMDD |
| 生命週期 | 36000 | - |
常用分析指標與應用場景
- 用户活躍度
- 日活、周活、月活:統計用户的活躍頻率,通過設備ID計算不同時間範圍內的活躍用户。
- 留存率:統計新增用户的留存情況,計算1天、7天等時間範圍內的用户留存率。
- 用户增長與迴流
- 新增用户:基於每日新增用户的統計。
- 迴流用户:分析在一段時間內迴歸活躍的用户數量。
- 用户轉化與行為分析
- 轉化率:從商品詳情到下單、支付的轉化率。
- 復購率:按用户或商品的復購情況統計,支持商品或品類的復購趨勢分析。
- 商品分析
- 銷售額和GMV:按商品或品類計算銷售額和GMV,分析熱銷產品。
- Top N商品:計算銷售排名前N的商品,支持流行度和消費偏好的分析。
- 用户留存與流失分析
- 沉默用户:統計登錄時間為7天前且登錄頻率極低的用户。
- 流失用户:識別近期未登錄或活躍度降低的用户,便於後續的用户運營和召回策略。
數據應用層的角色與更新策略
- 應用層角色 ADS層主要面向業務方和數據產品團隊,數據經過多層處理和彙總後直接支持報表、KPI、OLAP分析和儀表盤等應用。作為面向最終用户的數據集市,ADS層能夠快速響應業務需求。
- 更新方式 舊數據通常採用覆蓋更新,按業務需求定期刷新,確保數據時效性。
臨時表支持
- TMP層 數據處理過程中常需臨時表以支持複雜計算,ADS層提供獨立的TMP層(DW TMP)用於存儲這些中間計算結果,避免主數據表的反覆更新,提高數據處理的效率和穩定性。 通過ADS層的數據集市和寬表設計,企業能夠更靈活地支持多種數據產品和分析需求,為業務增長、用户行為分析、市場洞察等提供強有力的數據支撐。
層次調用規範
在數據倉庫分層架構中,必須遵循嚴格的調用規範,以確保數據流動的單向性,避免複雜的依賴關係和反向調用。
- 禁止反向調用:下層數據不可調用上層數據,保持數據流向的單向性和清晰性。
- 調用規範:
- oODS層:僅允許被DWD層調用。
- oDWD層:允許被DWS和ADS層調用。
- oDWS層:僅允許被ADS層調用。
- oADS層:可調用DWD、DWS及其他ADS表,但建議優先使用匯總度更高的數據,以減少數據冗餘和性能消耗。
調用路徑概述
數據的標準調用路徑包括:
- ODS -> DWD -> DWS -> ADS
- ODS -> DWD -> ADS
數據倉庫技術趨勢與小結
數據倉庫分層架構為企業構建了高效、穩定的海量數據管理體系,支持數據治理、業務邏輯隔離、數據追蹤和複用。通過ODS、DWD、DWS和ADS的分層設計,數據在逐層傳遞和加工中實現標準化和清洗,確保了一致性和數據可追溯性。 這一架構不僅提高了數據使用的規範性,還降低了系統耦合,提升了數據共享的便捷性。
- ODS層:作為原始數據接入層,ODS層負責保留細粒度數據,通過ETL或CDC方式捕獲源系統的變更數據,確保數據完整性。
- DWD層:標準化數據並進行清洗和脱敏,去除冗餘,確保數據一致性,為後續分析和建模提供了基礎。
- DWS層:將DWD數據聚合為符合業務主題的寬表,構建面向主題的數據服務,優化計算性能並促進數據複用。
- ADS層:進一步聚合數據,生成高性能、面向應用的寬表,支持數據產品和業務應用場景,如OLAP分析、KPI監控和儀表盤展示。
隨着數據規模和數據源的多樣化,數據倉庫的架構和技術也在不斷演進,當前的主要趨勢包括:
- 實時數據處理與CDC技術:傳統的批量數據處理已經無法滿足現代企業的需求,CDC技術成為數據實時同步和更新的主流方法,確保數據倉庫中數據的實時性。
- 數據湖與數據倉庫的融合:在成為行業的熱門趨勢,例如Data Lakehouse架構,將數據湖的靈活性與數據倉庫的高效分析能力相結合,為企業提供更強的數據管理能力。
- DataOps與自動化數據管理:隨着企業對數據管理自動化要求的提高,DataOps逐漸成為數據管理的核心工具。例如,白鯨開源的DataOps工具能夠實現從數據採集到數據質量控制的全流程自動化管理。
結合新一代數據湖倉(Hudi、Iceberg、GaussDB、Redshift、Greenplum、Doris、Starrocks、偶數、PieDB、MatrixDB等)配合白鯨開源的WhaleStudio工具,可以快速根據本文的設計實踐建立起批流一體的數據湖倉。整體上,無論是湖、倉、實時數倉、都要遵循分層設計架構明確了各層的調用邊界,禁止反向調用,確保數據流動順暢,降低了系統複雜度。
白鯨開源 WhaleStudio 是 ApacheDolphinScheduler 和Apache SeaTunnel 原班人馬打造的商業版數據同步與調度工具,提供功能更多、穩定性更強的商業版本解決用户調度,數據開發、數據同步和 ETL 的問題,目前支持 200+ 種數據庫(信創、雲、開源、ERP 等)的 ETL 與數據開發,全面替換Informatica 與 Talend 等工具相應功能,在中信證券等多個行業頭部企業都有成功商業版和實施替換案例。