【實時數倉】Day04-DWS層業務實現:
一、DWS層與DWM設計
1、思路
之前已經進行分流
但只需要一些指標進行實時計算,將這些指標以主題寬表的形式輸出
2、需求
訪客、商品、地區、關鍵詞四層的需求(視覺化大屏展示、多維分析)
3、DWS層定位
輕度聚合、主題中管理
二、DWS層-訪客主題寬表的計算
DWS表主要包含維度表和事實表
維度表主要包括渠道、地區、版本、新老使用者等
事實表主要包括PV、UV、跳出次數、進入頁面數(session_count)、連續訪問時長等
1、需求分析
合併接收到的資料流,按時間視窗聚合,並將聚合結果寫入資料庫
2、實現
(1)讀取kafka各個流的資料
page_log、dwm_uv、dwm_jump_user跳出使用者
(2)合併讀取到的資料流
使用union合併兩個結構相同的資料流
需要提前調整資料結構封裝主題寬表實體類(兩個待合併的流也都要是這樣的結構)
userJumpDStream.map實現轉換
合併4條輸入的流:
uniqueVisitStatsDstream.union(
pageViewStatsDstream,
sessionVisitDstream,
userJumpStatDstream
);
(3)根據維度進行聚合
設定時間標記及水位線
4個維度作為key,使用tuple4組合,進行分組,.keyBy(new KeySelector
reduce視窗內聚合,並補充時間欄位
(4)寫入OLAP資料庫ClickHouse
專門解決大量資料統計分析的資料庫,在保證了海量資料儲存的能力,同時又兼顧了響應速度
先建表,使用ReplacingMergeTree 引擎來保證冪等性
將日期變為數字作為分割槽型別
編寫ClickhouseUtils工具類
建立 TransientSink 註解,標記不需要儲存的欄位
配置連線地址類,並增加寫入OLAP的sink
檢視控制檯輸出及表中資料visitor_stats_2021
本文來自部落格園,作者:哥們要飛,轉載請註明原文連結:https://www.cnblogs.com/liujinhui/p/15780738.html