大數據 - 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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...