【大数据课程】高途课程实践-Day02:利用Hive SQL编写离线数仓实现可视化展示
〇、概述
1、实现内容
使用Hive SQL编程,构造分层离线数仓
并可以通过Quick Bi进行展示
2、过程
(1)数据接⼊到ODS层
(2)进⾏ODS到DWD层数据开发
(3)进⾏ODS到DIM层数据开发
a.创建 【电商_商家维度表_⽇】表
b.创建【电商_商品维度表_⽇】表
c.创建【电商_⽤⼾维度表_⽇】表
(4)进⾏DWS层数据开发
(5)进⾏ADS应⽤层的数据开发
a.看板_总指标看板统计
b.看板_商品销售地域分析
c.看板_商品销量排行
3、逻辑模型
4、示例数据
一、数据导入ODS层
-- 订单表
create table if not exists ods_plato_orders_da(
id bigint comment '交易id',
deal_time string comment '交易日期',
stock_id bigint comment '商品id',
shop_id bigint comment '商家id',
user_id bigint comment '用户id',
deal_status string comment '交易状态',
stock_cnt bigint comment '商品数量',
deal_amount decimal(38,18) comment '订单金额'
)
partitioned by(pt string comment '日期分区'); -- 商家表
create table if not exists ods_plato_shops_da(
id bigint comment '商家id',
name string comment '商家店铺名称',
level int comment '商家等级',
register_time string comment '商家注册时间'
)
partitioned by(pt string comment '日期分区'); -- 用户表
create table if not exists ods_plato_users_da(
id bigint comment '用户id',
account string comment '用户账号',
level int comment '用户等级',
register_time string comment '用户注册时间',
status string comment '用户状态',
addr string comment '用户收货地址',
city string comment '用户所在城市'
)
partitioned by(pt string comment '日期分区'); -- 商品表
create table if not exists ods_plato_stocks_da(
id bigint comment '商品id',
name string comment '商品名称',
level_1st string comment '商品一级类目',
level_2st string comment '商品二级类目',
price decimal(38,18) comment '商品单价',
status string comment '商品状态',
activity_status string comment '商品活动状态',
shop_id bigint comment '商家id'
)
partitioned by(pt string comment '日期分区');
二、进行ODS到DWD层的数据开发
1.先创建 dwd_deal_orders_detail_da 数据表; 2.编写insert 语句进⾏数据加载。
参考dwd/dwd_deal_orders_detail_da.sql ⽂件
代码
--odps sql
--********************************************************************--
--author:侯老师
--create time:2021-11-10 20:27:27
--table name: 电商_交易事物事实表_日
--********************************************************************-- create table if not exists dwd_deal_orders_detail_da(
deal_id bigint comment '交易id',
deal_date string comment '交易日期',
stock_id bigint comment '商品id',
shop_id bigint comment '商家id',
user_id bigint comment '用户id',
deal_status string comment '交易状态',
stock_cnt bigint comment '商品数量',
deal_amount decimal(38,18) comment '订单金额'
)
comment '电商_交易事物事实表_日'
partitioned by(pt string comment '日期分区'); insert overwrite table dwd_deal_orders_detail_da partition(pt='${bizdate}')
select
id deal_id -- 交易id
,to_date(deal_time) as deal_date -- 交易日期
,stock_id -- 商品id
,shop_id -- 商家id
,user_id -- 用户id
,deal_status -- 交易状态
,stock_cnt -- 商品数量
,deal_amount -- 订单金额
from ods_plato_orders_da
where pt='${bizdate}';
三、进⾏ODS到DIM层数据开发
1、创建 【电商_商家维度表_⽇】表
参考dim/dim_shops_main_info_da.sql脚本,进⾏数据开发。
--odps sql
--********************************************************************--
--author:侯老师
--create time:2021-11-10 20:27:27
--table name: 电商_商家维度表_日
--********************************************************************-- create table if not exists dim_shops_main_info_da(
shop_id bigint comment '商家id',
shop_name string comment '商家店铺名称',
shop_level int comment '商家等级',
shop_register_time string comment '商家注册时间'
)
comment '电商_商家维度表_日'
partitioned by(pt string comment '日期分区'); insert overwrite table dim_shops_main_info_da partition(pt='${bizdate}')
select
id as shop_id -- 商家id
,name as shop_name -- 商家店铺名称
,level as shop_level -- 商家等级
,register_time as shop_register_time -- 商家注册时间
from ods_plato_shops_da
where pt='${bizdate}';
2、创建【电商_商品维度表_⽇】表
参考dim/dim_stocks_main_info_da.sql脚本,进⾏数据开发。
--odps sql
--********************************************************************--
--author:侯老师
--create time:2021-11-10 20:27:27
--table name: 电商_商品维度表_日
--********************************************************************-- create table if not exists dim_stocks_main_info_da(
stock_id bigint comment '商品id',
stock_name string comment '商品名称',
stock_1st_level string comment '商品一级类目',
stock_2st_level string comment '商品二级类目',
stock_price decimal(38,18) comment '商品单价',
stock_status string comment '商品状态',
stock_activity_status string comment '商品活动状态',
shop_id bigint comment '商家id'
)
comment '电商_商品维度表_日'
partitioned by(pt string comment '日期分区'); insert overwrite table dim_stocks_main_info_da partition(pt='${bizdate}')
select
id as stock_id -- 商品id
,name as stock_name -- 商品名称
,level_1st as stock_1st_level -- 商品一级类目
,level_2st as stock_2st_level -- 商品二级类目
,price as stock_price -- 商品单价
,status as stock_status -- 商品状态
,activity_status as stock_activity_status -- 商品活动状态
,shop_id as shop_id -- 商家id
from ods_plato_stocks_da
where pt='${bizdate}';
3、创建【电商_⽤⼾维度表_⽇】表
参考dim/dim_users_main_info_da.sql脚本,进⾏数据开发。
--odps sql
--********************************************************************--
--author:侯老师
--create time:2021-11-10 20:27:27
--table name: 电商_用户维度表_日
--********************************************************************-- create table if not exists dim_users_main_info_da(
user_id bigint comment '用户id',
user_account string comment '用户账号',
user_level int comment '用户等级',
user_register_time string comment '用户注册时间',
user_status string comment '用户状态',
user_addr string comment '用户收货地址',
user_city string comment '用户所在城市'
)
comment '电商_用户维度表_日'
partitioned by(pt string comment '日期分区'); insert overwrite table dim_users_main_info_da partition(pt='${bizdate}')
select
id as user_id -- 用户id
,account as user_account -- 用户账号
,level as user_level -- 用户等级
,register_time as user_register_time -- 用户注册时间
,status as user_status -- 用户状态
,addr as user_addr -- 用户收货地址
,city as user_city -- 用户所在城市
from ods_plato_users_da
where pt='${bizdate}';
四、进⾏DWS层数据开发
参考dws/dws_deal_orders_summary_da.sql 脚本,进⾏数据汇总表开发。
--odps sql
--********************************************************************--
--author:侯老师
--create time:2021-11-10 20:27:27
--table name: 商品交易轻度汇总事实表
--********************************************************************-- create table if not exists dws_deal_orders_summary_da(
deal_id bigint comment '订单ID',
deal_date string comment '交易日期',
stock_id bigint comment '商品ID',
stock_name string comment '商品名称',
stock_1st_level string comment '商品一级类目',
stock_2st_level string comment '商品二级类目',
stock_price decimal(38,18) comment '商品单价',
stock_cnt bigint comment '商品订单数',
shop_id bigint comment '商家ID',
shop_name string comment '商家名称',
user_id bigint comment '买家用户ID',
user_city string comment '买家用户所在城市',
deal_amount decimal(38,18) comment '订单金额'
)
comment '商品交易轻度汇总事实表'
partitioned by(pt string comment '日期分区'); insert overwrite table dws_deal_orders_summary_da partition(pt='${bizdate}')
select
u1.deal_id -- 订单ID
,u1.deal_date -- 交易日期
,u4.stock_id -- 商品ID
,u4.stock_name -- 商品名称
,u4.stock_1st_level -- 商品一级类目
,u4.stock_2st_level -- 商品二级类目
,u4.stock_price -- 商品单价
,u1.stock_cnt -- 商品订单数
,u2.shop_id -- 商家ID
,u2.shop_name -- 商家名称
,u3.user_id -- 买家用户ID
,u3.user_city -- 买家用户所在城市
,u1.deal_amount -- 订单金额
from
(-- 交易事务事实表
select
deal_id -- 交易id
,stock_id -- 商品id
,deal_date -- 交易日期
,shop_id -- 商家id
,user_id -- 用户id
,stock_cnt -- 商品数量
,deal_amount -- 订单金额
from dwd_deal_orders_detail_da
where pt='${bizdate}'
and deal_status='有效'
) u1
left outer join
(-- 商家注册时间
select
shop_id -- 商家id
,shop_name -- 商家店铺名称
from dim_shops_main_info_da
where pt='${bizdate}'
) u2
on(u1.shop_id=u2.shop_id)
left outer join
(-- 用户维度表
select
user_id
,user_city -- 用户所在城市
from dim_users_main_info_da
where pt='${bizdate}'
) u3
on(u1.user_id=u3.user_id)
left outer join
(-- 商品维度表
select
stock_id -- 商品id
,stock_name -- 商品名称
,stock_1st_level -- 商品一级类目
,stock_2st_level -- 商品二级类目
,stock_price -- 商品单价
,stock_activity_status -- 商品活动状态
,shop_id -- 商家id
from dim_stocks_main_info_da
where pt='${bizdate}'
and stock_activity_status='促销'
) u4
on(u1.stock_id=u4.stock_id);
五、进⾏应⽤层的数据开发
参考ads⽬录,进⾏数据指标的汇总开发
1、看板_总指标看板统计
参考ads/ads_dashboard_total_stat_da.sql 脚本
--odps sql
--********************************************************************--
--author:侯老师
--create time:2021-11-10 20:27:27
--table name: 看板_总指标看板统计
--********************************************************************-- create table if not exists ads_dashboard_total_stat_da(
total_deal_amont decimal(38,18) comment '总销售金额',
total_user_ucnt bigint comment '购买用户数'
)
comment '看板_总指标看板统计'
partitioned by(pt string comment '日期分区'); insert overwrite table ads_dashboard_total_stat_da partition(pt='${bizdate}')
select
sum(deal_amount) as total_deal_amont -- 总销售金额
,count(distinct user_id) as total_user_ucnt -- 购买用户数
from dws_deal_orders_summary_da
where pt='${bizdate}';
2、看板_商品销售地域分析
参考ads/ads_dashboard_city_stat_da.sql脚本
--odps sql
--********************************************************************--
--author:侯老师
--create time:2021-11-10 20:27:27
--table name: 看板_商品销售地域分析
--********************************************************************-- create table if not exists ads_dashboard_city_stat_da(
user_city string comment '用户所在城市',
total_deal_amount decimal(38,18) comment '商品销售地域销售额'
)
comment '看板_商品销售地域分析'
partitioned by(pt string comment '日期分区'); insert overwrite table ads_dashboard_city_stat_da partition(pt='${bizdate}')
select
user_city -- 用户所在城市
,sum(deal_amount) as total_deal_amount -- 商品销售地域分析
from dws_deal_orders_summary_da
where pt='${bizdate}'
group by user_city;
3、看板_商品销售地域分析
参考ads/ads_dashboard_stock_stat_da.sql脚本
--odps sql
--********************************************************************--
--author:侯老师
--create time:2021-11-10 20:27:27
--table name: 看板_商品销量排行
--********************************************************************-- create table if not exists ads_dashboard_stock_stat_da(
stock_name string comment '商品名称',
total_deal_cnt bigint comment '商品销售量'
)
comment '看板_商品销量排行'
partitioned by(pt string comment '日期分区'); insert overwrite table ads_dashboard_stock_stat_da partition(pt='${bizdate}')
select
stock_name -- 商品名称
,count(deal_id) as total_deal_cnt -- 商品销量
from dws_deal_orders_summary_da
where pt='${bizdate}'
group by stock_name;
【大数据课程】高途课程实践-Day02:利用Hive SQL编写离线数仓实现可视化展示的更多相关文章
- MySQL在大数据、高并发场景下的SQL语句优化和"最佳实践"
本文主要针对中小型应用或网站,重点探讨日常程序开发中SQL语句的优化问题,所谓“大数据”.“高并发”仅针对中小型应用而言,专业的数据库运维大神请无视.以下实践为个人在实际开发工作中,针对相对“大数据” ...
- WOT干货大放送:大数据架构发展趋势及探索实践分享
WOT大数据处理技术分会场,PingCAP CTO黄东旭.易观智库CTO郭炜.Mob开发者服务平台技术副总监林荣波.宜信技术研发中心高级架构师王东及商助科技(99Click)顾问总监郑泉五位讲师, ...
- 大数据量高并发的数据库优化详解(MSSQL)
转载自:http://www.jb51.net/article/71041.htm 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能. ...
- 网易大数据平台的Spark技术实践
网易大数据平台的Spark技术实践 作者 王健宗 网易的实时计算需求 对于大多数的大数据而言,实时性是其所应具备的重要属性,信息的到达和获取应满足实时性的要求,而信息的价值需在其到达那刻展现才能利益最 ...
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第14门课程:Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发
掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime ...
- IT大数据服务管理高级课程(IT服务,大数据,云计算,智能城市)
个人简历 金石先生是马克思主义中国化的研究学者,上海财经大学经济学和管理学硕士,中国民主建国会成员,中国特色社会主义人文科技管理哲学的理论奠基人之一.金石先生博学多才,对问题有独到见解.专于工作且乐于 ...
- 大数据系列修炼-Scala课程01
简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...
- 大数据系列修炼-Scala课程03
前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...
- 大数据系列修炼-Scala课程07
由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函 ...
- 大数据系列修炼-Scala课程06
关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...
随机推荐
- Mysqldump 的 的 6 大使用场景的导出命令
Mysqldump 选项解析 场景描述 1. 导出 db1.db2 两个数据库的所有数据. mysqldump -uroot -p -P8635 -h192.168.0.199 --hex-blob ...
- 静态文件:Static Files
官方文档地址:https://fastapi.tiangolo.com/zh/tutorial/static-files/ from fastapi import FastAPI from fasta ...
- Alertmanager配置概述
Alertmanager主要负责对Prometheus产生的告警进行统一处理,因此在Alertmanager配置中一般会包含以下几个主要部分: 全局配置(global):用于定义一些全局的公共参数,如 ...
- 《吐血整理》高级系列教程-吃透Fiddler抓包教程(26)-Fiddler如何抓取Android7.0以上的Https包-上篇
1.简介 众所周知,假如设备是android 7.0+的系统同时应用设置targetSdkVersion >= 24的话,那么应用默认是不信任安装的Fiddler用户证书的,所以你就没法抓到应用 ...
- POJ3417 Network暗的连锁 (树上差分)
树上的边差分,x++,y++,lca(x,y)-=2. m条边可以看做将树上的一部分边覆盖,就用差分,x=1,表示x与fa(x)之间的边被覆盖一次,m次处理后跑一遍dfs统计子树和,每个节点子树和va ...
- 工厂方法在Spring源码中的运用
我们都知道Spring中IOC是使用的工厂模式,但是对于实现细节就一知半解了,今天这篇文章就带大家解读Spring中是如何使用工厂模式的. 在上篇文章中我们懂了什么是工厂模式,这篇文章就带着学过的概念 ...
- 使用idea操作git(ssh协议)
问题 我们发现,使用IDEA上的git功能,当使用ssh协议出现了可以commit但无法push和pull的问题,经过测试发现原因是Could not read from remsitory.直接翻译 ...
- Windows Server 2012部署遇到的问题
一.安装IIS提示"服务器管理器WinRM插件可能已损坏或丢失" 解决方案: 1.开启WinRM服务,添加ip监听 在服务中查看WinRM服务是否开启,如果没有开启则把该服务开启, ...
- 解决ffmpeg的播放摄像头的延时优化问题(项目案例使用有效)
在目前的项目中使用了flv的播放摄像头的方案,但是延时达到了7-8秒,所以客户颇有微词,没有办法,只能开始优化播放延时的问题,至于对接摄像头的方案有好几种,这种咱们以后在聊,今天只要聊聊聊优化参数的问 ...
- element-ui v-table 复选框默认选中
<el-table ref="refTable" :data="list" v-loading="listLoading" eleme ...