大數據 - DWS層 業務實現

来源:https://www.cnblogs.com/vipsoft/archive/2022/12/30/17010578.html
-Advertisement-
Play Games

統計主題 需求指標【ADS】輸出方式計算來源來源層級 訪客【DWS】pv可視化大屏page_log 直接可求dwd UV(DAU)可視化大屏需要用 page_log 過濾去重dwm UJ 跳出率可視化大屏需要通過 page_log 行為判斷dwm 進入頁面數可視化大屏需要識別開始訪問標識dwd 連續 ...


統計主題 需求指標【ADS】輸出方式計算來源來源層級
訪客【DWS】pv可視化大屏page_log 直接可求dwd
UV(DAU)可視化大屏需要用 page_log 過濾去重dwm
UJ 跳出率可視化大屏需要通過 page_log 行為判斷dwm
進入頁面數可視化大屏需要識別開始訪問標識dwd
連續訪問時長可視化大屏page_log 直接可求dwd
商品點擊多維分析page_log 直接可求dwd
收藏多維分析收藏表dwd
加入購物車多維分析購物車表dwd
下單可視化大屏訂單寬表dwm
支付多維分析支付寬表dwm
退款多維分析退款表dwd
評論多維分析評論表dwd
地區PV多維分析page_log 直接可求dwd
UV多維分析需要用 page_log 過濾去重dwm
下單可視化大屏訂單寬表dwm
關鍵詞搜索關鍵詞可視化大屏頁面訪問日誌 直接可求dwd
點擊商品關鍵詞可視化大屏商品主題下單再次聚合dws
下單商品關鍵詞可視化大屏商品主題下單再次聚合dws

DWS 層的定位是什麼

  • 輕度聚合,因為 DWS 層要應對很多實時查詢,如果是完全的明細那麼查詢的壓力是非常大的。
  • 將更多的實時數據以主題的方式組合起來便於管理,同時也能減少維度查詢的次數。

DWS 層-訪客主題寬表的計算

統計主題 需求指標【ADS】輸出方式計算來源來源層級
訪客【DWS】PV可視化大屏page_log 直接可求dwd
UV(DAU)可視化大屏需要用 page_log 過濾去重dwm
跳出率可視化大屏需要通過 page_log 行為判斷dwm
進入頁面數可視化大屏需要識別開始訪問標識dwd
連續訪問時長可視化大屏page_log 直接可求dwd

設計一張 DWS 層的表其實就兩件事:維度和度量(事實數據)

  • 度量包括 PV、UV、跳出次數、進入頁面數(session_count)、連續訪問時長
  • 維度包括在分析中比較重要的幾個欄位:渠道、地區、版本、新老用戶進行聚合

需求分析與思路

  • 接收各個明細數據,變為數據流
  • 把數據流合併在一起,成為一個相同格式對象的數據流
  • 對合併的流進行聚合,聚合的時間視窗決定了數據的時效性
  • 把聚合結果寫在資料庫中

功能實現

封裝 VisitorStatsApp,讀取 Kafka 各個流數據

訪客主題寬表計算

  • 要不要把多個明細的同樣的維度統計在一起?
  • 因為單位時間內 mid 的操作數據非常有限不能明顯的壓縮數據量(如果是數據量夠大,或者單位時間夠長可以)
  • 所以用常用統計的四個維度進行聚合 渠道、新老用戶、app 版本、省市區域
  • 度量值包括 啟動、日活(當日首次啟動)、訪問頁面數、新增用戶數、跳出數、平均頁面停留時長、總訪問時長
  • 聚合視窗: 10 秒
  • 各個數據在維度聚合前不具備關聯性,所以先進行維度聚合
  • 進行關聯 這是一個 fulljoin
  • 可以考慮使用 FlinkSQL 完成
合併數據流

把數據流合併在一起,成為一個相同格式對象的數據流
合併數據流的核心運算元是 union。但是 union 運算元,要求所有的數據流結構必須一致。所以 union 前要調整數據結構。

根據維度進行聚合
  • 設置時間標記及水位線,因為涉及開窗聚合,所以要設定事件時間及水位線
  • 分組 分組選取四個維度作為 key , 使用 Tuple4 組合
  • 開窗
  • 視窗內聚合及補充時間欄位
  • 寫入 OLAP 資料庫

為何要寫入 ClickHouse 資料庫,ClickHouse 資料庫作為專門解決大量數據統計分析的資料庫,在保證了海量數據存儲的能力,同時又兼顧了響應速度。而且還支持標準 SQL,即靈活又易上手。

flink-connector-jdbc 是官方通用的 jdbcSink 包。只要引入對應的 jdbc 驅動,flink 可以用它應對各種支持 jdbc 的資料庫,比如 phoenix 也可以用它。但是這個 jdbc-sink 只支持數據流對應一張數據表。如果是一流對多表,就必須通過自定義的方式實現了,比如之前的維度數據。

雖然這種 jdbc-sink 只能一流對一表,但是由於內部使用了預編譯器,所以可以實現批量提交以優化寫入速度。

DWS 層-商品主題寬表的計算

商品點擊多維分析page_log 直接可求dwd
收藏多維分析收藏表dwd
加入購物車多維分析購物車表dwd
下單可視化大屏訂單寬表dwm
支付多維分析支付寬表dwm
退款多維分析退款表dwd
評論多維分析評論表dwd
與訪客的 dws 層的寬表類似,也是把多個事實表的明細數據彙總起來組合成寬表。

需求分析與思路

  • 從 Kafka 主題中獲得數據流
  • 把 Json 字元串數據流轉換為統一數據對象的數據流
  • 把統一的數據結構流合併為一個流
  • 設定事件時間與水位線
  • 分組、開窗、聚合
  • 關聯維度補充數據
  • 寫入 ClickHouse

功能實現

  • 封裝商品統計實體類 ProductStats
  • 創建 ProductStatsApp,從 Kafka 主題中獲得數據流
  • 把 JSON 字元串數據流轉換為統一數據對象的數據流
  • 創建電商業務常量類 GmallConstant
  • 把統一的數據結構流合併為一個流
  • 設定事件時間與水位線
  • 分組、開窗、聚合
  • 補充商品維度信息
    因為除了下單操作之外,其它操作,只獲取到了商品的 id,其它維度信息是沒有的
  • 寫入 ClickHouse product_stats

DWS 層-地區主題表(FlinkSQL)

地區PV多維分析page_log 直接可求dwd
UV多維分析需要用 page_log 過濾去重dwm
下單可視化大屏訂單寬表dwm
地區主題主要是反映各個地區的銷售情況。從業務邏輯上地區主題比起商品更加簡單,業務邏輯也沒有什麼特別的就是做一次輕度聚合然後保存,所以在這裡我們體驗一下使用 FlinkSQL,來完成該業務。

需求分析與思路

  • 定義 Table 流環境
  • 把數據源定義為動態表
  • 通過 SQL 查詢出結果表
  • 把結果表轉換為數據流
  • 把數據流寫入目標資料庫
    如果是 Flink 官方支持的資料庫,也可以直接把目標數據表定義為動態表,用 insert into 寫入。由於ClickHouse目前官方沒有支持的jdbc連接器(目前支持Mysql、PostgreSQL、Derby)。也可以製作自定義 sink,實現官方不支持的連接器。但是比較繁瑣。

功能實現

DWS 層-關鍵詞主題寬表的計算

關鍵詞搜索關鍵詞可視化大屏頁面訪問日誌 直接可求dwd
點擊商品關鍵詞可視化大屏商品主題下單再次聚合dws
下單商品關鍵詞可視化大屏商品主題下單再次聚合dws

需求分析與思路

image

關鍵詞主題這個主要是為了大屏展示中的字元雲的展示效果,用於感性的讓大屏觀看者感知目前的用戶都更關心的那些商品和關鍵詞。
關鍵詞的展示也是一種維度聚合的結果,根據聚合的大小來決定關鍵詞的大小。
關鍵詞的第一重要來源的就是用戶在搜索欄的搜索,另外就是從以商品為主題的統計中獲取關鍵詞。

功能實現

關於分詞

以我們需要根據把長文本分割成一個一個的詞,這種分詞技術,在搜索引擎中可能會用到。對於中文分詞,現在的搜索引擎基本上都是使用的第三方分詞器,咱們在計算數據中也可以,使用和搜索引擎中一致的分詞器,IK。

<dependency>
 <groupId>com.janeluo</groupId>
 <artifactId>ikanalyzer</artifactId>
 <version>2012_u6</version>
</dependency>

有了分詞器,那麼另外一個要考慮的問題就是如何把分詞器的使用揉進 FlinkSQL 中。
因為 SQL 的語法和相關的函數都是 Flink 內定的,想要使用外部工具,就必須結合自定義函數。

image

https://www.bilibili.com/video/BV1Ju411o7f8/?p=115

大數據-數據倉庫-實時數倉架構分析
大數據-業務數據採集-FlinkCDC
大數據 - DWD&DIM 行為數據
大數據 - DWD&DIM 業務數據
大數據 DWM層 業務實現


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 擴展方法名:Filter 支持參數:實體類、JObject 擴展代碼: //白色風車 public static class EntityFrameworkCoreExtensions { private static DbCommand CreateCommand(DatabaseFacade f ...
  • 主題 1 The Shell 課程概覽與 shell · the missing semester of your cs education (missing-semester-cn.github.io) Shell是什麼? 一旦你想脫離可視化界面讓你做的,然後做點別的事情,那麼Shell將是你和計 ...
  • -- 題圖:蘇州天平山楓葉 現在是 2022 年末,痞子衡又要起筆博文年終總結了,看著 2020 年之前的博文總結缺失,始終覺得缺憾,所以寫下此篇 2016 - 2019 總結合輯。2016 年之前,痞子衡也發表過一些文章,不過沒有持續性,那時候更多是以個人筆記形式留在硬碟里。2016 年是痞子衡正 ...
  • Shell變數 變數是任何一種編程語言都必不可少的組成部分,變數用來存放各種數據。腳本語言在定義變數時通常不需要指明類型,直接賦值就可以,Shell 變數也遵循這個規則。 在 Bash shell 中,每一個變數的值都是字元串,無論你給變數賦值時有沒有使用引號,值都會以字元串的形式存儲。 這意味著, ...
  • 參考資料:RabbitMQ tutorial - "Hello world!" — RabbitMQ 前言 RabbitMQ是一個中間人,它接受和轉發消息。我們可以把它想象成一個郵局:當你把郵件投入郵箱的時候,你可以確信它最終會被投遞到收件人的手中。RabbitMQ就是那個郵箱、郵局和郵差。區別就在 ...
  • 一:背景 1.講故事 最近給一位朋友做 SQL 慢語句 優化,花了些時間調優,遺憾的是 SQLSERVER 非源碼公開,玩起來不是那麼順利,不過從這次經歷中我覺得明年的一個重大任務就是好好研究一下它,爭取在 SQLSERVER 性能優化上做一些成績,哈哈! 個人覺得要想深入研究 SQLSERVER, ...
  • 摘要:MRS IoTDB,它是華為FusionInsight MRS大數據套件中的時序資料庫產品,在深度參與Apache IoTDB社區開源版的基礎上推出的高性能企業級時序資料庫產品。 本文分享自華為雲社區《工業數據分析為什麼要用FusionInsight MRS IoTDB?》,作者:高深廣 。 ...
  • 簡介 CloudCanal 實現了對 Online DDL 工具如 GH-OST 和 PT-OSC 的支持,保證了對端實時同步源端的 Online DDL 操作。 本文以 MySQL -> MySQL 同步鏈路使用 GH-OST 為例,介紹 CloudCanal 是如何支持實時同步 GH-OST 產 ...
一周排行
    -Advertisement-
    Play Games
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...