尚硅谷大数据项目《在线教育之实时数仓》笔记009

发布时间:2023年12月20日

视频地址:尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili

目录

第10章 数仓开发之DWS层

P084

P085

P086

P087

P088

P089

P090

P091

P092

P093

P094

P095

P096

P097

P098

P099

P100

P101

P102

P103

P104

P105

P106

P107

P108

P109

P110

P111

P112

P113

P114

P115

P116

P117

P118

P119


第10章 数仓开发之DWS层

P084

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

P085

DwsTrafficPageViewWindow
// TODO 1 创建环境设置后端
// TODO 2 从page_log读取数据
// TODO 3 对数据进行过滤转换

P086

[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 :)

P087

10.4 播放域章节粒度视频播放各窗口汇总表

P088

DwsLearnChapterPlayWindow

TODO 1 ~ TODO 5

P089

DwsLearnChapterPlayWindow

TODO 6 ~ TODO 9

P090

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 运行程序
    }
}

P091

DwsUserLoginWindow

// TODO 1 创建环境设置后端
// TODO 2 读取dwd登录主题数据dwd_user_user_login
// TODO 3 按照user_id分组聚合
// TODO 4 统计回流用户和独立用户数

P092

DwsUserLoginWindow

// TODO 5 设置水位线
// TODO 6 开窗聚合
// TODO 7 写出到clickHouse
// TODO 8 运行程序

P093

10.6 用户域用户注册各窗口汇总表

10.6.1 主要任务

从 DWD 层用户注册表中读取数据,去重,统计各窗口注册用户数,写入 ClickHouse。

P094

DwsUserRegisterWindow

TODO 1 ~ TODO 4

P095

DwsUserRegisterWindow

TODO 5 ~ TODO 9

P096

10.7 交易域加购各窗口汇总表

10.7.1 主要任务

从 Kafka 读取用户加购明细数据,统计各窗口加购独立用户数,写入 ClickHouse。

DwsTradeCartAddWindow,TODO 1 ~ TODO 8

P097

P098

10.8 交易域下单各窗口汇总表

10.8.1 主要任务

从 Kafka 订单明细主题读取数据,对数据去重,统计当日下单独立用户数和新增下单用户数,封装为实体类,写入 ClickHouse。

P099

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 执行任务

P100

P101

10.9 交易域支付成功各窗口汇总表

10.9.1 主要任务

从 Kafka DWD 支付成功主题读取数据,对数据去重,统计当日支付成功独立用户数和新增用户数,封装为实体类,写入 ClickHouse。

DwsTradePaySucWindow

P102

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 执行任务

P103

P104

10.10 交易域课程粒度下单各窗口汇总表

10.10.1 主要任务

从 Kafka 订单明细主题读取数据,对数据去重,统计当日各课程下单金额,封装为实体类,补充学科、类别维度信息,写入 ClickHouse。

P105

P106

P107

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 统计订单数

P108

DwsTradeSourceOrderWindow

// TODO 9 设置水位线
// TODO 10 分组开窗聚合
// TODO 11 维度关联来源名称
// TODO 12 写出到clickHouse
// TODO 13 执行任务

P109

10.12 交易域省份粒度下单各窗口汇总表

10.12.1 主要任务

从 Kafka topic_db 主题读取数据,筛选订单表数据,统计当日各省份下单独立用户数和订单数,封装为实体类,按照省份 ID 分组,聚合度量字段,补充省份名称信息,将数据写入 ClickHouse。

DwsTradeProvinceOrderWindow,TODO 1 ~ TODO 11

P110

DwsTradeProvinceOrderWindow,TODO 1 ~ TODO 11

P111

10.13 互动域课程粒度评价各窗口汇总表

10.13.1 主要任务

??????? 从 Kafka 课程评价明细主题读取数据,统计各窗口各课程评价总分、评价人数和好评人数,写入 ClickHouse。

DwsInteractionCourseReviewWindow

P112

DwsInteractionCourseReviewWindow

P113

10.14 考试域试卷粒度考试各窗口汇总表

10.14.1 主要任务

从 Kafka DWD 考试域答卷主题读取数据,统计各窗口各试卷答卷人数、总分和总时长,写入 ClickHouse。

P114

P115

10.15 考试域试卷分数段粒度考试各窗口汇总表

10.15.1 主要任务

从 Kafka DWD 考试域答卷主题读取数据,统计各窗口各试卷各分数段答卷人数,写入 ClickHouse。

DwsExaminationPaperScoreDurationExamWindowBea

P116

?

P117

10.16 考试域题目粒度答题各窗口汇总表

10.16.1 主要任务

从 Kafka DWD 考试域答题主题读取数据,统计各窗口各题目答题次数和正确答题次数,写入 ClickHouse。

P118

P119

10.17 测试常见问题总结

1)水位线始终为负无穷(实际上是个极小值)

2)没有聚合结果

3)关于 Kafka 分区的删除和重新消费

文章来源:https://blog.csdn.net/weixin_44949135/article/details/134647591
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。