1. 程式人生 > 其它 >【實時數倉】Day04-DWS層業務實現:

【實時數倉】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