【大数据课程】高途课程实践-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 ...
随机推荐
- 3.使用nexus3配置maven私有仓库
配置之前,我们先来看看系统默认创建的都有哪些 其中圈起来的都是系统原有的,用不到,就全删掉,重新创建. 1,创建blob存储 2,创建hosted类型的maven 点击 Repository下面的 R ...
- C#/VB.NET 读取条码类型及条码在图片中的坐标位置
我们在创建条形码时,如果以图片的方式将创建好的条码保存到指定文件夹路径,可以在程序中直接加载图片使用:已生成的条码图片,需要通过读取图片中的条码信息,如条码类型.条码绘制区域在图片中的四个顶点坐标位置 ...
- [题解] Codeforces 1349 D Slime and Biscuits 概率,推式子,DP,解方程
题目 神题.很多东西都不知道是怎么凑出来的,随意设置几个变量,之间就产生了密切的关系.下次碰到这种题应该还是不会做罢. 令\(E_x\)为最后结束时所有的饼干都在第x个人手中的概率*时间的和.\(an ...
- STM32的SPI口的DMA读写[原创www.cnblogs.com/helesheng]
SPI是我最常用的接口之一,连接管脚仅为4根:在常见的芯片间通信方式中,速度远优于UART.I2C等其他接口.STM32的SPI口的同步时钟最快可到PCLK的二分之一,单个字节或字的通信时间都在us以 ...
- HDU1114 Piggy-Bank (完全背包)
完全背包模板,和01背包相比不用倒推,因为一种可以选多个. 这道题求最小,dp数组初始化为无穷即可. 1 #include<iostream> 2 #include<cstring& ...
- 洛谷P3376 (最大流模板)
1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 const int maxn=5005 ...
- 实现fastdfs防盗链功能
目录 1.背景 2.实现原理 2.1 开启防盗链 2.2 重启 nginx 2.3 Java代码生成token 1.token生成规则 2.java生成token 3.测试 3.1 带正确token访 ...
- 分布式存储系统之Ceph集群MDS扩展
前文我们了解了cephfs使用相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16758866.html:今天我们来聊一聊MDS组件扩展相关话题: 我们 ...
- 【做题笔记】CSP-S 往年试题
题单 本文章正在持续更新-- [2021] 廊桥分配 题目 题面描述 所有飞机分为两类--国内区和国际区,两区廊桥数量互不干扰.每架飞机遵循"先到先得"的原则,优先选择编号最小的廊 ...
- token字段,请务加在请求地址的头部header
如下图所示,你必须在请求的头部加上 token参数,主要原因有两个.第一点,这个是登录标志,因为接口访问用不了cookie,所以只能通过这个header请求标志判断用户是否已经登录.第二点,系统有时候 ...