〇、概述

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编写离线数仓实现可视化展示的更多相关文章

  1. MySQL在大数据、高并发场景下的SQL语句优化和"最佳实践"

    本文主要针对中小型应用或网站,重点探讨日常程序开发中SQL语句的优化问题,所谓“大数据”.“高并发”仅针对中小型应用而言,专业的数据库运维大神请无视.以下实践为个人在实际开发工作中,针对相对“大数据” ...

  2. WOT干货大放送:大数据架构发展趋势及探索实践分享

      WOT大数据处理技术分会场,PingCAP CTO黄东旭.易观智库CTO郭炜.Mob开发者服务平台技术副总监林荣波.宜信技术研发中心高级架构师王东及商助科技(99Click)顾问总监郑泉五位讲师, ...

  3. 大数据量高并发的数据库优化详解(MSSQL)

    转载自:http://www.jb51.net/article/71041.htm 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能. ...

  4. 网易大数据平台的Spark技术实践

    网易大数据平台的Spark技术实践 作者 王健宗 网易的实时计算需求 对于大多数的大数据而言,实时性是其所应具备的重要属性,信息的到达和获取应满足实时性的要求,而信息的价值需在其到达那刻展现才能利益最 ...

  5. 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第14门课程:Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发

    掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime ...

  6. IT大数据服务管理高级课程(IT服务,大数据,云计算,智能城市)

    个人简历 金石先生是马克思主义中国化的研究学者,上海财经大学经济学和管理学硕士,中国民主建国会成员,中国特色社会主义人文科技管理哲学的理论奠基人之一.金石先生博学多才,对问题有独到见解.专于工作且乐于 ...

  7. 大数据系列修炼-Scala课程01

    简介 由于本人刚毕业,也是从事软件开发相关的工作.想再学习一下关于大数据.移动互联网.云计算相关的技术.为我的未来打好基础.并且从零开始学习大数据相关的知识,脚踏实地的走好每一步,听行业前辈说毕业生刚 ...

  8. 大数据系列修炼-Scala课程03

    前言 今天上班看了很多关于前端js,jQuery.bootstrap.js以及springMVC看得迷迷糊糊的,毕竟以前很少去学习前端的技术,所有看得有点困,还好看得比较多,回家后也开始学习关于Sca ...

  9. 大数据系列修炼-Scala课程07

    由于昨天下班后有点困,就没有来及写博客,今天会把它补上!把这个习惯坚持下去! 关于Scala高阶函数详解 1.Scala高阶函数代码实现:高阶函数就是在我们函数中套用函数 2.高阶函数代码详解:高阶函 ...

  10. 大数据系列修炼-Scala课程06

    关于Scala中的正则表达式与模式匹配结合的正则表达式Reg 正则表达式的实现:正则表达式的定义与其它语言差不多,只需在表达式后加一个.r,并且可以遍历相应的表达式进行匹配 //定义的正则表达式 va ...

随机推荐

  1. Traefik 2.0 暴露 Redis(TCP) 服务

    文章转载自:https://mp.weixin.qq.com/s?__biz=MzU4MjQ0MTU4Ng==&mid=2247484452&idx=1&sn=0a17b907 ...

  2. Jenkins 中使用 Git Parameter 插件动态获取 Git 的分支

  3. elk使用微信ElartAlert企业微信告警,自定义告警内容

    第一种方式 alert: - "elastalert_modules.wechat_qiye_alert.WeChatAlerter" alert_text: " === ...

  4. 关于linux的一点好奇心(五):进程线程的创建

    一直以来,进程和线程的区别,这种问题一般会被面试官拿来考考面试者,可见这事就不太简单.简单说一点差异是,进程拥有独立的内存资源信息,而线程则共享父进程的资源信息.也就是说线程不拥有内存资源,所以对系统 ...

  5. 企业MES系统与ERP信息集成要素有哪些?

    关于要讲明企业MES系统与ERP信息集成要素有哪些,得先弄清楚他们之间的关系:从工厂的管理来说,ERP在上MES在下,ERP统领企业全局包括MES,为管理层服务,重心在于企业决策,ERP对企业宏观管理 ...

  6. 【高并发】ScheduledThreadPoolExecutor与Timer的区别和简单示例

    JDK 1.5开始提供ScheduledThreadPoolExecutor类,ScheduledThreadPoolExecutor类继承ThreadPoolExecutor类重用线程池实现了任务的 ...

  7. KubeEdge 1.12版本发布,稳定性、安全性、可扩展性均带来大幅提升

    摘要:2022年9月29日,KubeEdge发布1.12版本.新版本新增多个增强功能,在扩展性.稳定性.安全性上均有大幅提升. 本文分享自华为云社区<KubeEdge 1.12版本发布,稳定性. ...

  8. 2022-08-25-cdn套中套

    layout: post cid: 19 title: cdn套中套 slug: 19 date: 2022/08/25 20:32:00 updated: 2022/08/26 11:20:20 s ...

  9. 如何使用IDEA自动生成类图

    然后再类里边按 Ctrl+Alt+U 然后就会生成类图,这个样子 然后怎样把生成的类图搞出来.当然是使用截图软件啦.微信上的截图软件和qq上的截图软件好像都不在阔以,你一点击截图按钮.生成的类图就会消 ...

  10. Redis 02: redis基础知识 + 5种数据结构 + 基础操作命令

    Redis基础知识 1).测试redis服务的性能: redis-benchmark 2).查看redis服务是否正常运行: ping 如果正常---pong 3).查看redis服务器的统计信息: ...