【实时数仓】Day03-DWM 层业务:各层的设计和常用信息、访客UV计算、跳出明细计算(CEP技术合并数据识别)、订单宽表(双流合并,事实表与维度数据合并)、支付宽表
一、DWS层与DWM层的设计
1、设计思路
分流到了DWD层,并将数据分别出传入指定的topic

规划需要实时计算的指标,形成主题宽表,作为DWS层
2、需求梳理


DWM 层主要服务 DWS,因为部分需求从 DWD 层到DWS 层中间会有一定的计算量,这部分计算的结果很有可能被多个 DWS 层主题复用,
所以部分 DWD层后面会形成一层 DWM
主要的DWM层业务包括:访客UV(独立访客、日活用户)计算、跳出明细计算、订单宽表、支付宽表
二、DWM层-访客UV计算
1、需求分析
UV,全称是 Unique Visitor,即独立访客,对于实时计算中,也可以称为 DAU(Daily Active User),即每日活跃用户【日活】
识别:是访客打开的第一个页面,一天的范围内去重
2、实现过程
(1)从 Kafka 的 dwd_page_log 主题接收数据,得到JSONObject格式的DataSource
(2)对数据过滤
按照mid分组,记录用户进入时间
重写open初始化状态,重写filter实现过滤【last_page_id 不为空,并且lastVisitDate 是今天】,设置1天的过期时间
过滤后的数据写入dwm_unique_visit
三、DWM 层-跳出明细计算
1、跳出
(1)访问完某页面就退出
关注跳出率可以查看引流过来的访客能否被吸引
(2)识别跳出行为
是用户访问的第一个页面(是否有上一个访问的页面last_page_id )
一段时间内,用户不再访问其他页面
(3)组合判断存在数据+后续一段时间内不存在的数据
使用Flink 自带的 CEP 技术(适合通过多条数据组合来识别某个事件)
跳出事件的本质:条件事件+超时事件的组合
2、实现
(1)从 Kafka 的 dwd_page_log 主题读取页面日志
(2)通过CEP完成跳出判断
设定时间语义为事件时间,选取ts作为事件事件
按日志数据的mid进行分组,得到每隔mid的数据流<JSONObject, String>
配置CEP表达式:lastPageId == null || lastPageId.length() <= 0;【表示没有后续访问的页面】
根据表达式筛选流CEP.pattern(keyedStream, pattern);
设置超时时间标识timeoutTag,实现 PatternFlatTimeoutFunction 中的 timeout 方法
超时数据打上标记,flatSelect提取匹配数据,SideOutput侧输出流输出超时数据
getSideOutput(outputTag)与匹配数据做union连接,即selectDS.union(userJumpDetailDS);
四、订单宽表
1、需求分析
围绕订单有很多的维度统计需求,比如用户、地区、商品、品类、品牌等等

之前进行了拆分,维度表在HBASE中,事实数据进入kafka的DWD层
需要两种关联:事实表之间的流关联,事实表与维度表之间(在流计算中查询数据源)
2、订单表和订单明细表关联
创建实体类,接收订单和订单明细表数据
在配置表中进行配置sink表名及字段名
两表关联,实现双流join(基于时间窗口和基于状态缓存,选用后者中的intervalJoin)
orderInfoWithIdKeyedStream.intervalJoin(orderDetailWithOrderIdKeyedStream)
创建合并后的宽表实体类
3、维度表关联
(1)实现内容:在流中查询存储在 HBase 中的数据表
(2)编写Phoneix的工具类和封装查询维度的工具类DimUtil
(3)查询维度数据,运行main方法测试
(4)优化1:旁路缓存模式
加入旁路缓存模式,可以使用堆缓存或者独立缓存服务(redis,memcache)
采用redis管理型更强

封装 RedisUtil,通过连接池获得 Jedis
在 DimUtil 中加入缓存,如果缓存没有再从的 Phoenix 查询
增加失效缓存方法及数据变化时的invoke 方法
(5)优化2:异步查询
默认只能同步方式交互,耗费了大量时间
使用Flink的Async I/O异步交互
封装线程工具类,自定义维度查询接口
使用时选择的两个方法:有序等待和无序等待
分别实现在维度表中关联用户维度、省市维度、SKU维度、SPU维度、商品维度、品类维度
(6)将结果写入kafka sink
五、DWM 层-支付宽表
1、需求分析
支付表没有到订单明细,支付金额没有细分到商品上
要把支付表的信息与订单宽表关联上,以统计各个商品的支付情况
思路:用流的方式接收订单宽表,然后用双流 join 方式进行合并,用 intervalJoin 来管理流的状态时间,保证当支付到达时订单宽表还保存在状态中。
2、功能实现
创建支付表、订单宽表实体类,并读取对应topic
数据转化为bean,提取时间戳生成WaterMark水位线
按订单id分组,进行双流join
六、总结
1、DWD层和DWM层的任务
DWD层:把一种明细转换为另一种明细,以应对后续的统计
DWM层:把需要多次使用的中间结果保存,避免重复运算()
2、应当掌握
利用状态(state)进行去重操作-(访客UV计算)
利用CEP对一组数据进行筛选判断(跳出行为计算)
使用 intervalJoin 处理流 join
维度关联处理,并通过缓存和异步查询对性能进行优化
【实时数仓】Day03-DWM 层业务:各层的设计和常用信息、访客UV计算、跳出明细计算(CEP技术合并数据识别)、订单宽表(双流合并,事实表与维度数据合并)、支付宽表的更多相关文章
- 基于 Flink 的实时数仓生产实践
数据仓库的建设是“数据智能”必不可少的一环,也是大规模数据应用中必然面临的挑战.在智能商业中,数据的结果代表了用户反馈.获取数据的及时性尤为重要.快速获取数据反馈能够帮助公司更快地做出决策,更好地进行 ...
- 实时数仓(二):DWD层-数据处理
目录 实时数仓(二):DWD层-数据处理 1.数据源 2.用户行为日志 2.1开发环境搭建 1)包结构 2)pom.xml 3)MykafkaUtil.java 4)log4j.properties ...
- 大数据之Hudi + Kylin的准实时数仓实现
问题导读:1.数据库.数据仓库如何理解?2.数据湖有什么用途?解决什么问题?3.数据仓库的加载链路如何实现?4.Hudi新一代数据湖项目有什么优势? 在近期的 Apache Kylin × Apach ...
- 美团点评基于 Flink 的实时数仓建设实践
https://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651749037&idx=1&sn=4a448647b3dae5 ...
- flink实时数仓从入门到实战
第一章.flink实时数仓入门 一.依赖 <!--Licensed to the Apache Software Foundation (ASF) under oneor more contri ...
- HBase实战 | 知乎实时数仓架构演进
https://mp.weixin.qq.com/s/hx-q13QteNvtXRpNsE5Y0A 作者 | 知乎数据工程团队编辑 | VincentAI 前线导读:“数据智能” (Data Inte ...
- (转)用Flink取代Spark Streaming!知乎实时数仓架构演进
转:https://mp.weixin.qq.com/s/e8lsGyl8oVtfg6HhXyIe4A AI 前线导读:“数据智能” (Data Intelligence) 有一个必须且基础的环节,就 ...
- 基于Flink构建全场景实时数仓
目录: 一. 实时计算初期 二. 实时数仓建设 三. Lambda架构的实时数仓 四. Kappa架构的实时数仓 五. 流批结合的实时数仓 实时计算初期 虽然实时计算在最近几年才火起来,但是在早期也有 ...
- 基于 Kafka 的实时数仓在搜索的实践应用
一.概述 Apache Kafka 发展至今,已经是一个很成熟的消息队列组件了,也是大数据生态圈中不可或缺的一员.Apache Kafka 社区非常的活跃,通过社区成员不断的贡献代码和迭代项目,使得 ...
- 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读
阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...
随机推荐
- 完整的WindowsServer服务器系统初始化配置、安全策略加固和基线检查脚本等保2.0适用
转载自:https://www.bilibili.com/read/cv14326780?spm_id_from=333.999.0.0 0x00 前言简述 最近单位在做等保测评,由于本人从事安全运维 ...
- Elasticsearch官方文档离线访问实操指南
文章转载自:https://mp.weixin.qq.com/s/Cn9ddkj-cne5pKtfOgNPbg 延申一下,不仅能下载Elasticsearch官方文档,还能下载其他软件的官方文档,详看 ...
- 初试 Ceph 存储之块设备、文件系统、对象存储
转载自:https://cloud.tencent.com/developer/article/1010543 1.Ceph 存储介绍 Ceph 是一个开源的分布式存储系统,包括对象存储.块设备.文件 ...
- LeetCode - 数组遍历
1. 485. 最大连续 1 的个数 1.1 分析题意 首先:我们求的是连续的1的个数,所以我们不能也没必要对数组进行排序: 其次:只要求求出最大连续1的个数,并不要求具体的区间数目,所以我们只需要用 ...
- CentOS 7.9 安装 redis-6.2.0
一.CentOS 7.9 安装 redis-6.2.0 1 下载地址:https://download.redis.io/releases/redis-6.2.0.tar.gz 2 安装gcc来进行编 ...
- 带你读AI论文丨ACGAN-动漫头像生成
摘要:ACGAN-动漫头像生成是一个十分优秀的开源项目. 本文分享自华为云社区<[云驻共创]AI论文精读会:ACGAN-动漫头像生成>,作者:SpiderMan. 1.论文及算法介绍 1. ...
- NLP之基于logistic回归的文本分类
数据集下载: 链接:https://pan.baidu.com/s/17EL37CQ-FtOXhtdZHQDPgw 提取码:0829 逻辑斯蒂回归 @ 目录 逻辑斯蒂回归 1.理论 1.1 多分类 1 ...
- v-debounce-throttle是一个vue防抖节流指令
v-debounce-throttle是一个vue防抖节流指令 简介 v-debounce-throttle是一个vue防抖节流指令,控制单一事件的触发频率.其核心是拦截组件元素的v-on绑定事件,采 ...
- VUE3系列---nvm环境搭建
nvm node version manager:node版本管理工具 可以用来管理多个node版本 1.下载 下载地址:https://github.com/coreybutler/nvm-wind ...
- .NET7 gRPC JSON转码+OpenAPI
gRPC JSON转码 gRPC JSON 转码允许浏览器应用调用 gRPC 服务,就像它们是使用 JSON 的 RESTful API 一样. 浏览器应用不需要生成 gRPC 客户端或了解 gRPC ...