目录
10.3 流量域页面浏览各窗口汇总表
10.3.1 主要任务
从 Kafka 页面日志主题读取数据,统计当日的首页、课程列表页和课程详情页独立访客数。
10.3.2 思路分析
1)读取 Kafka 页面主题数据
2)过滤数据,转换数据结构
??????? 仅保留 page_id 为 home、course_list或course_detail 的数据,因为本程序统计的度量仅与这三个页面有关,其它数据无用。将数据结构转换为实体类。
3)按照 mid 分组
4)统计各页面独立访客数
运用 Flink 状态编程,为每个 mid、每个页面维护末次访问日期。如果 page_id 为 home,当状态中存储的日期为 null 或在当日之前时,将 homeUvCt(首页独立访客数) 置为 1,其它度量字段置为 0,并将状态中的日期更新为当日,最后将数据发送到下游。否则不做操作,舍弃数据。其它页面独立访客数的计算同理。
5)设置水位线
6)开窗
7)聚合
8)将数据写出到ClickHouse
DwsTrafficPageViewWindow
// TODO 1 创建环境设置后端
// TODO 2 从page_log读取数据
// TODO 3 对数据进行过滤转换
[atguigu@node001 ~]$ clickhouse-client -m
ClickHouse client version 20.4.5.36 (official build).
Connecting to localhost:9000 as user default.
Connected to ClickHouse server version 20.4.5 revision 54434.
node001 :) show databases;
SHOW DATABASES
┌─name───────────────────────────┐
│ _temporary_and_external_tables │
│ default │
│ edu_realtime │
│ system │
└────────────────────────────────┘
4 rows in set. Elapsed: 0.064 sec.
node001 :) use edu_realtime;
USE edu_realtime
Ok.
0 rows in set. Elapsed: 0.006 sec.
node001 :) drop table if exists dws_traffic_page_view_window;
DROP TABLE IF EXISTS dws_traffic_page_view_window
Ok.
0 rows in set. Elapsed: 0.005 sec.
node001 :) create table dws_traffic_page_view_window(
:-] stt DateTime,
:-] edt DateTime,
:-] home_uv_count UInt64,
:-] list_uv_count UInt64,
:-] detail_uv_count UInt64,
:-] ts UInt64
:-] ) engine = ReplacingMergeTree(ts)
:-] partition by toYYYYMMDD(stt)
:-] order by(stt, edt);
CREATE TABLE dws_traffic_page_view_window
(
`stt` DateTime,
`edt` DateTime,
`home_uv_count` UInt64,
`list_uv_count` UInt64,
`detail_uv_count` UInt64,
`ts` UInt64
)
ENGINE = ReplacingMergeTree(ts)
PARTITION BY toYYYYMMDD(stt)
ORDER BY (stt, edt)
Ok.
0 rows in set. Elapsed: 0.069 sec.
node001 :) show tables;
SHOW TABLES
┌─name─────────────────────────────────────────────┐
│ dws_traffic_page_view_window │
│ dws_traffic_source_keyword_page_view_window │
│ dws_traffic_vc_source_ar_is_new_page_view_window │
└──────────────────────────────────────────────────┘
3 rows in set. Elapsed: 0.022 sec.
node001 :) select * from dws_traffic_page_view_window;
SELECT *
FROM dws_traffic_page_view_window
Ok.
0 rows in set. Elapsed: 0.010 sec.
node001 :)
10.4 播放域章节粒度视频播放各窗口汇总表
DwsLearnChapterPlayWindow
TODO 1 ~ TODO 5
DwsLearnChapterPlayWindow
TODO 6 ~ TODO 9
10.5 用户域用户登录各窗口汇总表
10.5.1 主要任务
从 Kafka 用户登陆明细主题读取数据,统计七日回流用户数和当日独立用户数。
10.5.2 思路分析
之前的活跃用户,一段时间未活跃(流失),今日又活跃了,就称为回流用户。此处要求统计回流用户总数。规定当日登录,且自上次登录之后至少 7 日未登录的用户为回流用户。
package com.atguigu.edu.realtime.app.dws;
import java.time.Duration;
/**
* @author yhm
* @create 2023-05-01 10:36
*/
public class DwsUserLoginWindow {
public static void main(String[] args) throws Exception {
// TODO 1 创建环境设置后端
// TODO 2 读取dwd登录主题数据dwd_user_user_login
// TODO 3 按照user_id分组聚合
// TODO 4 统计回流用户和独立用户数
// TODO 5 设置水位线
// TODO 6 开窗聚合
// TODO 7 写出到clickHouse
// TODO 8 运行程序
}
}
DwsUserLoginWindow
// TODO 1 创建环境设置后端
// TODO 2 读取dwd登录主题数据dwd_user_user_login
// TODO 3 按照user_id分组聚合
// TODO 4 统计回流用户和独立用户数
DwsUserLoginWindow
// TODO 5 设置水位线
// TODO 6 开窗聚合
// TODO 7 写出到clickHouse
// TODO 8 运行程序
10.6 用户域用户注册各窗口汇总表
10.6.1 主要任务
从 DWD 层用户注册表中读取数据,去重,统计各窗口注册用户数,写入 ClickHouse。
DwsUserRegisterWindow
TODO 1 ~ TODO 4
DwsUserRegisterWindow
TODO 5 ~ TODO 9
10.7 交易域加购各窗口汇总表
10.7.1 主要任务
从 Kafka 读取用户加购明细数据,统计各窗口加购独立用户数,写入 ClickHouse。
DwsTradeCartAddWindow,TODO 1 ~ TODO 8
10.8 交易域下单各窗口汇总表
10.8.1 主要任务
从 Kafka 订单明细主题读取数据,对数据去重,统计当日下单独立用户数和新增下单用户数,封装为实体类,写入 ClickHouse。
DwsTradeOrderWindow
// TODO 1 创建环境设置后端
// TODO 2 读取dwd下单明细主题数据dwd_trade_order_detail
// TODO 3 过滤null数据转换数据结构
// TODO 4 按照订单详情id分组去重
// TODO 5 按照user_id分组
// TODO 6 使用状态判断是否为独立用户或新用户
// TODO 7 添加水位线// TODO 8 开窗聚合
// TODO 9 写出到clickHouse
// TODO 10 执行任务
10.9 交易域支付成功各窗口汇总表
10.9.1 主要任务
从 Kafka DWD 支付成功主题读取数据,对数据去重,统计当日支付成功独立用户数和新增用户数,封装为实体类,写入 ClickHouse。
DwsTradePaySucWindow
DwsTradePaySucWindow
// TODO 1 创建环境设置后端
// TODO 2 读取dwd层支付成功主题数据dwd_trade_pay_suc_detail
// TODO 3 过滤null值转换数据结构
// TODO 4 按照订单明细ID分组
// TODO 5 使用flink状态去重
// TODO 6 按照user_id分组
// TODO 7 判断是否为新用户或者当天独立用户
// TODO 8 设置水位线
// TODO 9 开窗聚合
// TODO 10 写出到clickHouse
// TODO 11 执行任务
10.10 交易域课程粒度下单各窗口汇总表
10.10.1 主要任务
从 Kafka 订单明细主题读取数据,对数据去重,统计当日各课程下单金额,封装为实体类,补充学科、类别维度信息,写入 ClickHouse。
10.11 交易域来源粒度下单各窗口汇总表
10.11.1 主要任务
从 Kafka 订单明细主题读取数据,对数据去重,统计当日各来源下单独立用户数和订单数,封装为实体类,按照来源 ID 分组,聚合度量字段,补充来源名称信息,将数据写入 ClickHouse。
DwsTradeSourceOrderWindow
// TODO 1 创建环境设置后端
// TODO 2 读取dwd下单明细主题数据dwd_trade_order_detail
// TODO 3 过滤null数据转换数据结构
// TODO 4 按照订单详情id分组去重
// TODO 5 按照来源id和用户id分组
// TODO 6 统计独立用户
// TODO 7 按照订单id分组// TODO 8 统计订单数
DwsTradeSourceOrderWindow
// TODO 9 设置水位线
// TODO 10 分组开窗聚合
// TODO 11 维度关联来源名称
// TODO 12 写出到clickHouse
// TODO 13 执行任务
10.12 交易域省份粒度下单各窗口汇总表
10.12.1 主要任务
从 Kafka topic_db 主题读取数据,筛选订单表数据,统计当日各省份下单独立用户数和订单数,封装为实体类,按照省份 ID 分组,聚合度量字段,补充省份名称信息,将数据写入 ClickHouse。
DwsTradeProvinceOrderWindow,TODO 1 ~ TODO 11
DwsTradeProvinceOrderWindow,TODO 1 ~ TODO 11
10.13 互动域课程粒度评价各窗口汇总表
10.13.1 主要任务
??????? 从 Kafka 课程评价明细主题读取数据,统计各窗口各课程评价总分、评价人数和好评人数,写入 ClickHouse。
DwsInteractionCourseReviewWindow
DwsInteractionCourseReviewWindow
10.14 考试域试卷粒度考试各窗口汇总表
10.14.1 主要任务
从 Kafka DWD 考试域答卷主题读取数据,统计各窗口各试卷答卷人数、总分和总时长,写入 ClickHouse。
10.15 考试域试卷分数段粒度考试各窗口汇总表
10.15.1 主要任务
从 Kafka DWD 考试域答卷主题读取数据,统计各窗口各试卷各分数段答卷人数,写入 ClickHouse。
DwsExaminationPaperScoreDurationExamWindowBea
?
10.16 考试域题目粒度答题各窗口汇总表
10.16.1 主要任务
从 Kafka DWD 考试域答题主题读取数据,统计各窗口各题目答题次数和正确答题次数,写入 ClickHouse。
10.17 测试常见问题总结
1)水位线始终为负无穷(实际上是个极小值)
2)没有聚合结果
3)关于 Kafka 分区的删除和重新消费