大数据 - DWS层 业务实现

数据,dws,业务,实现 · 浏览次数 : 370

小编点评

**需求分析与思路** **ADS 数据可视化需求** ADS 数据可视化需要根据维度聚合和度量(事实数据)度量进行计算。 **DWS 层分析指标** * **PV (页面访问数)** * **UV (页面访问次数)** * **跳出率** * **进入页面数** * **连续访问时长** * **渠道** * **地区** * **版本** * **新老用户** **计算公式** * dwdUV (DAU) = 综合PV、UV、跳出率、进入页面数、连续访问时长等指标 **数据流处理** 1. 将多个维度数据进行维度聚合,包括渠道、地区、版本、新老用户。 2. 将各个维度指标进行度量计算。 3. 计算dwdUV (DAU)。 **数据存储** dwdUV (DAU) 可存储在 ClickHouse 数据库中。 **代码示例** ```flink // 计算 dwdUV (DAU) long dwduv = aggregate( count() as long, // 其他的维度聚合和度量计算 ) .filter(// 过滤条件) .select(// 计算 dwdUV (DAU) // 各种维度指标 ) .collect(); ```

正文

统计主题 需求指标【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层 业务实现
大数据 - DWS层 业务实现
大数据 - ADS 数据可视化实现

与大数据 - DWS层 业务实现相似的内容:

大数据 - DWS层 业务实现

统计主题 需求指标【ADS】输出方式计算来源来源层级 访客【DWS】pv可视化大屏page_log 直接可求dwd UV(DAU)可视化大屏需要用 page_log 过滤去重dwm UJ 跳出率可视化大屏需要通过 page_log 行为判断dwm 进入页面数可视化大屏需要识别开始访问标识dwd 连续

大数据 - DWM层 业务实现

DWM 建表,需要看 DWS 需求。 DWS 来自维度(访客、商品、地区、关键词),为了出最终的指标 ADS 需求指标 DWT 为什么实时数仓没有DWT,因为它是历史的聚集,累积结果,实时数仓中不需要 DWD 不需要加工 DWM 需要加工的数据 统计主题 需求指标【ADS】输出方式计算来源来源层级

对接HiveMetaStore,拥抱开源大数据

本文分享自华为云社区《对接HiveMetaStore,拥抱开源大数据》,作者:睡觉是大事。 1. 前言 适用版本:9.1.0及以上 在大数据融合分析时代,面对海量的数据以及各种复杂的查询,性能是我们使用一款数据处理引擎最重要的考量。而GaussDB(DWS)服务有着强大的计算引擎,其计算性能优于MR

云小课|GaussDB(DWS)数据存储尽在掌控,冷热数据切换自如

阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要: GaussDB(DWS)支持根据业务系统的不同使用需求,对膨胀的数据进行冷热分级管理,将数据按照时间分为热数据、冷数

GaussDB(DWS)性能调优,解决DM区大内存占用问题

本文分享自华为云社区《GaussDB(DWS)性能调优:DM区优化案例——维度表关联条件存在会计期》,作者: O泡果奶~。 当前DM(P1、P3、CBGDM)存在维度表与主表关联时使用会计期作为关联条件,会导致出现大内存占用或未识别数据倾斜的问题 【场景一】f.period_id = 维度表.per

GaussDB(DWS)性能调优:indexscan导致的性能问题识别与优化

摘要:通常跑批加工场景下,都是大数量做关联操作,通常不建议使用索引。有些时候因为计划误判导致使用索引的可能会导致严重的性能问题。本文从一个典型的索引导致性能的场景重发,剖析此类问题的特征,定位方法和解决方法 本文分享自华为云社区《GaussDB(DWS)性能调优:indexscan导致的性能问题识别

DTSE Tech Talk 第18期丨统计信息大揭秘,数仓SQL执行优化之密钥

摘要:华为云EI DTSE技术布道师王跃,针对统计信息对于查询优化器的重要性,GaussDB(DWS)最新版本的analyze当前能力,与开发者和伙伴朋友们展开交流互动,帮助开发者快速上手使用统计信息的自动收集功能。 在本期《统计信息大揭秘——SQL执行优化之密钥》的主题直播中,我们邀请到华为云EI

数仓性能调优:大宽表关联MERGE性能优化

摘要:本文主要为大家讲解在数仓性能调优过程中,关于大宽表关联MERGE性能优化过程。 本文分享自华为云社区《GaussDB(DWS)性能调优:大宽表关联MERGE性能优化》,作者:譡里个檔。 【业务背景】 如下MERGE语句执行耗时长达2034s MERGE INTO sdifin.hah_ae_l

大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题

大数据面试SQL每日一题系列:最高峰同时在线主播人数。字节,快手等大厂高频面试题 之后会不定期更新每日一题sql系列。 SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集,如有雷同,纯属巧合。 1.题目 问题1:如下为某直播平台各主播的开播及关播时间数据明细,现在需要计算该平台最高峰期同时

大数据怎么学?对大数据开发领域及岗位的详细解读,完整理解大数据开发领域技术体系

经常有小伙伴和我咨询大数据怎么学,我觉得有必要写一下关于大数据开发的具体方向,下次就不用苦哈哈的打字回复了。直接回复文章。 1.大数据岗位划分 我们通常说的大数据开发主要分为三大方向: 1.1数据平台开发工程师 主要从事后端开发,结合Hadoop,flink,spark等做二次开发,基于底层框架开发