剑指数据仓库-项目篇(五)

一、进行指标计算

二、数仓项目作业

一、进行指标计算

使用SQOOP把Hive中ads_bill_sum_count这张表的数据导入到MySQL中dw数据库中的ads_bill_sum_count表中,SQL如下:

sqoop export --connect jdbc:mysql://sz5i5j-01:3306/ruozedata_dw --username root --password 960210 --table ads_bill_sum_count --export-dir '/user/hive/warehouse/ruozedata_erp.db/ads_bill_sum_count' --fields-terminated-by "\t" --lines-terminated-by "\n" -m 1

那比如我们今明两天都执行了这个脚本,有两条相同的数据,如何处理:先到MySQL进行delete表删除再export导入;结果到MySQL需要考虑数据的重复性,假设现在只有一次

再使用SQOOP从Hive中把这张表ads_sku_sum_count_by_purchase_and_sell导到MySQL中去:

sqoop export --connect 'jdbc:mysql://sz5i5j-01:3306/ruozedata_dw' \
--username root \
--password 960210 \
--table ads_sku_sum_count_by_purchase_and_sell \
--export-dir '/user/hive/warehouse/ruozedata_erp.db/ads_sku_sum_count_by_purchase_and_sell' \
--fields-terminated-by "\t" \
--lines-terminated-by "\n" \
-m 1

sqoop提示okay,查看发现字符集乱码;根据J总提供的文档一通操作哦,加上在SQOOP导出的时候加上一句话,把字符集加上即可:?useUnicode=true&charset=utf-8
在这里插入图片描述

1.1、部署Superset

  • https://blog.csdn.net/SparkOnYarn/article/details/105895168

建议在CentOS上部署使用superset,否则环境很难支持。

1.2、指标计算

在这里插入图片描述

  • 添加如下两张表:schema才是我们真正的database
    在这里插入图片描述
  • 创建Charts图表:
    在这里插入图片描述
  • 如下别忘了保存
    在这里插入图片描述
  • add to a new dashboard
    在这里插入图片描述
如何对Dashboard中的图表进行编辑:

在这里插入图片描述

  • 单机Edit dashboard:
    在这里插入图片描述

  • 如下图右侧有很多的图表控件什么的可供选择,左边的框也是可以进行拖拽使用的;
    在这里插入图片描述
    最新版superset应该是0.30.1会有一个样式可供选择:
    在这里插入图片描述

  • 一张表下如何存放几个指标,ADD chart to existing dashboard
    在这里插入图片描述

Superset如何构建Dashboard:
在这里插入图片描述

Superset上计算最近30天的每天、每小时订单总量(含退货)

dim_time 最近30天是按照小时的,它的数据肯定是最全的,拿它作为主表;a:mysql建表dim_time.sql表,Hive也进行建表,dwd层没有ods层;dwd层的表可以通过爬虫也可以通过自建的出数据;

2019-12-28是varchar类型的,并不是timestamp类型;所以把时间给补齐,以这样的形式:2019-09-29 09:00:00,这样的话在图表中是很容易识别出来的。

Superset中制成曲线图,time的类型一定是timestamp类型的,Query中的查询语句进行修改:sum(bill_count)、sum(return_bill_count),还需要设置每隔多久刷新数据

还有基于Superset的二次开发(python、flask),比如支持echart、生产上的报表支持水印(很重要的一点)、支持单点登录(一个ip一个浏览器)

1.3、物理删除和逻辑删除

DELETE发现:1、获取MySQL中的binlog文件 --> canal/maxwell --> kafka --> flume --> hive按天分区表(delete的数据)–> 凌晨1点ods_update抽取,
凌晨2点ods_update+dwd表的合并且作废,–> new dwd表
new dwd表+29号的delete分区数据做join
把删除的数据 new dwd表在delete存在的数据endday=29号

2、使用spark来进行重刷,mysql <==> dwd right join where mysql.pk is null的数据,把endday=29号的数据作废

3、全量重刷

4、主机器节点设置触发器,从节点设置的触发器是无效的,正常业务就算是物理删除,也会很少发生,除非是脏数据需要dba进行操作;锁表了解下
触发器是我们删除的数据会建立一张t_delete表 --> ods分区,按天分区 --> 参考1

目标就是发现delete的那些数据,把数据搬迁了操作,不管是通过sqoop还是通过binlog日志去搬都是可以的;

在这里插入图片描述
在这里插入图片描述
sku 50 12-28 今天
sku 70 12-29 明天
sku 80 12-30 后天

在12-29把28号的数据先delete掉的,29号只有29号的数据;30号也是把t表清空,只有30号的数据;数据想要一个追加应该怎样做。

第一种复杂:delete from t; 通过这个表去写sql;先按每天进行汇总,按天进行排序,做一个累加,第一行50,第二行50+20,第三行50+20+10;Spark中有累加的操作,可以用SQL来做,复杂度比较高。

第二种做法:MySQL建表的时候,skuname、skunub、day,每次删除的时候,delete from t where day=28;

sqoop进行追加,相当于是insert into

其余指标:

1、GMV成交总额(包含退货)

2、成交转换率(并不是下了计划的订单一样成交了)

3、复购率(一个月重复购物的百分比)

4、PV(页面浏览量)、UV(用户访问量)

5、最近7天内连续2天的活跃用户有哪些(场景:今天登明天登是可以的)******面试经常会被考察到
去重登录用户ruozedata_log这张表,根据创建时间使用SQL语法来写。

6、用户行为漏斗分析表(追踪用户从打开浏览商品到最终付款的一个行为表)

二、数仓项目作业

1、ERP业务了解
2、IDEA+MySQL去执行
3、Hadoop伪分布式+hive+sqoop基础环境
4、Dbeaver:连接Hive+MySQL
5、ods表数据 sqoop导数据
6、dwd表数据 sqoop导数据
7、Rundeck部署
8、Superset部署
9、dws表,sqoop导数据
10、ads表,sqoop导数据
11、mysql表 sqoop导数据
12、superset中的Dashboard可视化
13、整理数仓分层、分层流程图、维度建模、拉链表的设计
14、整理物理删除、hive to mysql的优化点
15、整理指标SQL:13个基础指标(分组求topN、行转列、列转行)+1个平移累积计算+1个 最近7天内连续两天的活跃用户

数仓分层、建表、写指标,拼接字符串、分割字符串

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值