IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 大数据Flink电商实时数仓实战项目流程全解(七) DWS层设计--访客主题宽表的计算 -> 正文阅读

[大数据]大数据Flink电商实时数仓实战项目流程全解(七) DWS层设计--访客主题宽表的计算

这几天复习计网的东西去了~~不定期更新
之所以单独将这个主题宽表拿出来讲,是因为他的设计过程非常具有代表性,可以参照这个表的设计方式去实现后续其他的主题宽表设计(后续有Flink Sql的实现过程、另讲);
在该系列的第一篇文章中,我已经提高了各个层的设计目的;DWS层在本项目中的主要作用是为了ADS层的查询和后续可视化设计的,算是数据接口的直接数据来源,所以这里对实时性的要求很高,否则你再这里算个几十秒的延迟,最后展示出来的数据结果实时性肯定非常差;
对此,DWS层的设计应该突出实时性要求,在这里,不应该出现大批量的明细数据,而应该是针对可视化所需的主题宽表数据;同时,我们选用clickhouse数据库来做一个实时查询,实际上在OLAP中clickhouse的优势是非常明显的,因为其单表查询的能力非常强,速度很快,而我们在这里最好了主题宽表之后,也不需要再做联表查询,正好适合clickhouse来发挥作用;
在这里插入图片描述
目前我们已经获得了访客主题宽表所需要的各个单表的内容,接下来就是分析具体这个主题宽表需要哪些字段了;
对DWS层的表而言,我们一般从两个角度来设计:维度和度量,这里我们这两个概念做一个简要介绍:

维度:即观察数据的角度.比如员工数据,可以从性别角度来分析,也可以更加细化,从入职时间或者地区的维度来观察.维度是一组离散的值;
比如说性别中的男和女,或者时间维度上的每一个独立的日期.因此在统计时可以将维度值相同的记录聚合在一起,然后应用聚合函数做累加/平均/最大和最小值等聚合计算.

度量:即被聚合(观察)的统计值,也就是聚合运算的结果.比如说员工数据中不同性别员工的人数,又或者说在同一年入职的员工有多少.

根据我们所需的需求指标以及之后我们需要做可视化时候的一些维度,我们得出下列结论:
度量包括 PV、UV、跳出次数、进入页面数(session_count)、连续访问时长
维度包括在分析中比较重要的几个字段:渠道、地区、版本、新老用户进行聚合;(其实最后在处理完这些数据字段之后,我们还添加上了窗口时间,这是为了方便做数据分析时候,能快速得到时间段内数据内容)
其中度量数据的计算我们可以通过把对应的数据源流中的对应字段内容标记为1(具体设计见Bean类,这里应该不难理解),运用wordCount的思想来进行一个聚合统计,这样最后我们开窗统计的时候,就能知道对应窗口中数据的统计数目了;
我们以PV流为例来做一个简要介绍:

//转换pv流
SingleOutputStreamOperator<VisitorStats> pvStatsDS = pvJsonStrDS.map(
   new MapFunction<String, VisitorStats>() {
       @Override
       public VisitorStats map(String jsonStr) throws Exception {
           //将json格式字符串转换为json对象
           JSONObject jsonObj = JSON.parseObject(jsonStr);
           VisitorStats visitorStats = new VisitorStats(
               "",
               "",
                   //    //维度:版本
                   //    private String vc;
                   //    //维度:渠道
                   //    private String ch;
                   //    //维度:地区
                   //    private String ar;
                   //    //维度:新老用户标识
                   //    private String is_new;
               jsonObj.getJSONObject("common").getString("vc"),
               jsonObj.getJSONObject("common").getString("ch"),
               jsonObj.getJSONObject("common").getString("ar"),
               jsonObj.getJSONObject("common").getString("is_new"),
                   //    度量:独立访客数
                   //    private Long uv_ct=0L;(专门获取)
                   //    //度量:页面访问数
                   //    private Long pv_ct=0L;(一个数据算一次,所以初始值为1)
                   //    //度量: 进入次数 (session_count)
                   //    private Long sv_ct=0L;(专门获取)
                   //    //度量: 跳出次数
                   //    private Long uj_ct=0L;(专门获取)
                   //    //度量: 持续访问时间
                   //    private Long dur_sum=0L;
                   //    //统计时间
                   //    private Long ts;
               0L,
               1L,
               0L,
               0L,
               jsonObj.getJSONObject("page").getLong("during_time"),
               jsonObj.getLong("ts")
           );
           return visitorStats;
       }
   }
);
//仔细看注释内容,我们把对象中对应位置的pv字段设置为了1,这样每个符合pv的数据该字段值都是1,其他聚合字段全部设置为0,这样后续我们就能做聚合计算了;

接下来就是正常的union合并流以及事件时间戳的设置,按照我们之前确定好的维度进行分组,开窗聚合(这里的代码我就不讲了,太常见了);记得通过Context对象来获取窗口的时间,并一起输出出去;

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-08 11:24:53  更:2021-08-08 11:27:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 17:37:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码