尚硅谷大数据项目《在线教育之离线数仓》笔记004

视频地址:尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili

目录

第9章 数仓开发之DWD层

P049

P050

P051

P052

P053

P054

P055

P056

P057

P058

P059

P060

P061

P062

P063

P064

P065

P066

P067

P068

P069

P070


第9章 数仓开发之DWD层

P049

第9章 数仓开发之DWD层

DWD层设计要点:

(1)DWD层的设计依据是维度建模理论,该层存储维度模型的事实表。

(2)DWD层的数据存储格式为orc列式存储+snappy压缩。

(3)DWD层表名的命名规范为dwd_数据域_表名_单分区增量全量标识(inc/full)。

-- 9.1 交易域加购事务事实表
DROP TABLE IF EXISTS dwd_trade_cart_add_inc;
CREATE EXTERNAL TABLE dwd_trade_cart_add_inc
(`id`          STRING COMMENT '编号',`user_id`     STRING COMMENT '用户id',`course_id`   STRING COMMENT '课程id',`date_id`     STRING COMMENT '时间id',`session_id`  STRING COMMENT '会话id',`create_time` STRING COMMENT '加购时间',`cart_price`  DECIMAL(16, 2) COMMENT '加购时价格'
) COMMENT '交易域加购事务事实表'PARTITIONED BY (`dt` STRING)STORED AS ORCLOCATION '/warehouse/edu/dwd/dwd_trade_cart_add_inc/'TBLPROPERTIES ('orc.compress' = 'snappy');select *
from edu2077.ods_cart_info_full;select *
from edu2077.ods_cart_info_inc;select data.id,data.user_id,data.course_id,data.date_id,data.session_id,data.create_time,data.cart_price
from edu2077.ods_cart_info_inc
where dt = '2022-02-21'and type = 'bootstrap-insert';set hive.exec.dynamic.partition.mode=nonstrict;--关闭严格模式insert overwrite table edu2077.dwd_trade_cart_add_inc
select data.id,data.user_id,data.course_id,date_format(data.create_time, 'yyyy-MM-dd') date_id,data.session_id,data.create_time,data.cart_price,date_format(data.create_time, 'yyyy-MM-dd') dt
from edu2077.ods_cart_info_inc
where dt = '2022-02-21'and type = 'bootstrap-insert';insert overwrite table edu2077.dwd_trade_cart_add_inc partition (dt = '2022-02-21')
select data.id,data.user_id,data.course_id,date_format(data.create_time, 'yyyy-MM-dd') date_id,data.session_id,data.create_time,data.cart_price
from edu2077.ods_cart_info_inc
where dt = '2022-02-21'and type = 'bootstrap-insert';select *
from dwd_trade_cart_add_inc;--每日装载
insert overwrite table edu2077.dwd_trade_cart_add_inc partition (dt = '2022-02-22')
select data.id,data.user_id,data.course_id,date_format(data.create_time, 'yyyy-MM-dd') date_id,data.session_id,data.create_time,data.cart_price
from edu2077.ods_cart_info_inc
where dt = '2022-02-22'and type = 'insert';

P050

-- 9.2 交易域加购周期快照事实表
DROP TABLE IF EXISTS dwd_trade_cart_full;
CREATE EXTERNAL TABLE dwd_trade_cart_full
(`id`          STRING COMMENT '编号',`user_id`     STRING COMMENT '用户id',`course_id`   STRING COMMENT '课程id',`date_id`     STRING COMMENT '时间id',`session_id`  STRING COMMENT '会话id',`course_name` STRING COMMENT '课程名称',`create_time` STRING COMMENT '加购时间',`cart_price`  DECIMAL(16, 2) COMMENT '加购时价格'
) COMMENT '交易域加购周期快照事实表'PARTITIONED BY (`dt` STRING)STORED AS ORCLOCATION '/warehouse/edu/dwd/dwd_trade_cart_full/'TBLPROPERTIES ('orc.compress' = 'snappy');select * from ods_cart_info_full
where dt = '2022-02-21';--数据装载
insert overwrite table edu2077.dwd_trade_cart_full partition (dt = '2022-02-21')
select id,user_id,course_id,date_format(create_time, 'yyyy-MM-dd'),session_id,course_name,create_time,cart_price
from edu2077.ods_cart_info_full
where dt = '2022-02-21'and deleted = '0'and sold = '0';select * from dwd_trade_cart_full;

P051

P052

P053

--9.3 交易域试听下单累积快照事实表
DROP TABLE IF EXISTS dwd_trade_course_order_inc;
CREATE EXTERNAL TABLE dwd_trade_course_order_inc
(`id`                   STRING COMMENT '编号',`user_id`              STRING COMMENT '用户id',`course_id`            STRING COMMENT '课程id',`course_name`          STRING COMMENT '课程名称',`category_id`          STRING COMMENT '分类id',`category_name`        STRING COMMENT '分类名称',`subject_id`           STRING COMMENT '科目id',`subject_name`         STRING COMMENT '科目名称',`order_id`             STRING COMMENT '订单id',`province_id`          STRING COMMENT '省份id',`play_time`            STRING COMMENT '首次播放时间',`play_date`            STRING COMMENT '首次播放日期',`order_time`           STRING COMMENT '首次下单时间',`order_date`           STRING COMMENT '首次下单日期',`end_date`             STRING COMMENT '结束日期,试听后七天内未下单即为结束,试听日期+7为结束日期',`session_id`           STRING COMMENT '会话id',`original_amount`      DECIMAL(16, 2) COMMENT '原始金额分摊',`coupon_reduce_amount` DECIMAL(16, 2) COMMENT '优惠金额分摊',`final_amount`         DECIMAL(16, 2) COMMENT '最终价格分摊'
) COMMENT '交易域试听下单累积快照事实表'PARTITIONED BY (`dt` STRING)STORED AS ORCLOCATION '/warehouse/edu/dwd/dwd_trade_course_order_inc/'TBLPROPERTIES ('orc.compress' = 'snappy');set hive.exec.dynamic.partition.mode=nonstrict;--关闭严格模式select * from ods_user_chapter_process_full;select * from edu2077.ods_order_info_inc;--(1)首日装载
with play as(select min(id)                                     id,user_id,course_id,min(create_time)                            play_time,date_format(min(create_time), 'yyyy-MM-dd') play_datefrom edu2077.ods_user_chapter_process_fullwhere dt = '2022-02-21'group by user_id, course_id),oi as(select data.id,data.province_id,data.session_idfrom edu2077.ods_order_info_incwhere dt = '2022-02-21'and type = 'bootstrap-insert'),od as(select data.id,data.course_id,data.order_id,data.user_id,data.origin_amount,data.coupon_reduce,data.final_amount,data.create_time                            order_time,date_format(data.create_time, 'yyyy-MM-dd') order_datefrom edu2077.ods_order_detail_incwhere dt = '2022-02-21'and type = 'bootstrap-insert'),dim_course as (select id,course_name,category_id,category_name,subject_id,subject_namefrom edu2077.dim_course_fullwhere dt = '2022-02-21')
insert
overwrite
table
edu2077.dwd_trade_course_order_inc
partition
(
dt
)
select final.id,user_id,course_id,course_name,category_id,category_name,subject_id,subject_name,order_id,province_id,play_time,play_date,order_time,order_date,end_date,session_id,origin_amount,coupon_reduce,final_amount,casewhen end_date is not null then end_datewhen order_date is not null then order_dateelse '9999-12-31' end dt
from (select play.id,play.user_id,play.course_id,od.order_id,oi.province_id,play.play_time,play.play_date,od.order_time,od.order_date,if(od.order_date is null anddate_add(play.play_date, 7) <= '2022-02-21',date_add(play.play_date, 7), null) end_date,oi.session_id,od.origin_amount,od.coupon_reduce,od.final_amountfrom playleft join od on play.user_id = od.user_id and play.course_id = od.course_idleft join oi on od.order_id = oi.idwhere od.order_time is nullor od.order_time > play.play_time) finalleft join dim_course on course_id = dim_course.id;select * from dwd_trade_course_order_inc;

P054

--9.3 交易域试听下单累积快照事实表
--(2)每日装载
set hive.exec.dynamic.partition.mode=nonstrict;
with play as(select id,user_id,course_id,play_time,play_datefrom edu2077.dwd_trade_course_order_incwhere dt = '9999-12-31'unionselect min(id)                                     id,user_id,course_id,min(create_time),date_format(min(create_time), 'yyyy-MM-dd') play_datefrom edu2077.ods_user_chapter_process_fullwhere dt = '2022-02-22'group by user_id, course_idhaving date_format(min(create_time), 'yyyy-MM-dd') = '2022-02-22'),oi as(select data.id,data.province_id,data.session_id,data.create_time order_timefrom edu2077.ods_order_info_incwhere dt = '2022-02-22'and type = 'insert'),od as(select data.id,data.course_id,data.order_id,data.user_id,data.origin_amount,data.coupon_reduce,data.final_amount,date_format(data.create_time, 'yyyy-MM-dd') order_datefrom edu2077.ods_order_detail_incwhere dt = '2022-02-22'and type = 'insert'),dim_course as(select id,course_name,category_id,category_name,subject_id,subject_namefrom edu2077.dim_course_fullwhere dt = '2022-02-22')
insert
overwrite
table
edu2077.dwd_trade_course_order_inc
partition
(
dt
)
select final.id,user_id,course_id,course_name,category_id,category_name,subject_id,subject_name,order_id,province_id,play_time,play_date,order_time,order_date,end_date,session_id,origin_amount,coupon_reduce,final_amount,casewhen end_date is not null then end_datewhen order_date is not null then order_dateelse '9999-12-31' end dt
from (select play.id,play.user_id,play.course_id,od.order_id,oi.province_id,play.play_time,play.play_date,oi.order_time,od.order_date,if(order_date is null and date_add(play_date, 7) = '2022-02-22', '2022-02-22', null) end_date,oi.session_id,od.origin_amount,od.coupon_reduce,od.final_amountfrom playleft join od on play.user_id = od.user_id and play.course_id = od.course_idleft join oi on od.order_id = oi.idwhere order_time is nullor order_time > play_time) finalleft join dim_course on course_id = dim_course.id;

P055

--9.4 交易域下单事务事实表
DROP TABLE IF EXISTS dwd_trade_order_detail_inc;
CREATE EXTERNAL TABLE dwd_trade_order_detail_inc
(`id`                   STRING COMMENT '编号',`order_id`             STRING COMMENT '订单id',`user_id`              STRING COMMENT '用户id',`course_id`            STRING COMMENT '课程id',`course_name`          STRING COMMENT '课程名称',`category_id`          STRING COMMENT '分类id',`category_name`        STRING COMMENT '分类名称',`subject_id`           STRING COMMENT '科目id',`subject_name`         STRING COMMENT '科目名称',`province_id`          STRING COMMENT '省份id',`date_id`              STRING COMMENT '下单日期id',`session_id`           STRING COMMENT '会话id',`source_id`            STRING COMMENT '来源id',`create_time`          STRING COMMENT '下单时间',`original_amount`      DECIMAL(16, 2) COMMENT '原始金额分摊',`coupon_reduce_amount` DECIMAL(16, 2) COMMENT '优惠金额分摊',`final_amount`         DECIMAL(16, 2) COMMENT '最终价格分摊',`out_trade_no`         STRING COMMENT '订单交易编号',`trade_body`           STRING COMMENT '订单描述'
) COMMENT '交易域下单事务事实表'PARTITIONED BY (`dt` STRING)STORED AS ORCLOCATION '/warehouse/edu/dwd/dwd_trade_order_detail_inc/'TBLPROPERTIES ('orc.compress' = 'snappy');select * from edu2077.ods_order_detail_inc where dt = '2022-02-21';--(1)首日装载
set hive.exec.dynamic.partition.mode=nonstrict;insert overwrite table edu2077.dwd_trade_order_detail_incpartition (dt)
select odt.id,order_id,user_id,course_id,course_name,category_id,category_name,subject_id,subject_name,province_id,date_id,session_id,source_id,create_time,origin_amount,coupon_reduce,final_amount,out_trade_no,trade_body,date_id
from (select data.id,data.order_id,data.user_id,data.course_id,date_format(data.create_time, 'yyyy-MM-dd') date_id,data.create_time,data.origin_amount,data.coupon_reduce,data.final_amountfrom edu2077.ods_order_detail_incwhere dt = '2022-02-21'and type = 'bootstrap-insert') odtleft join(select data.id,data.province_id,data.out_trade_no,data.session_id,data.trade_bodyfrom edu2077.ods_order_info_incwhere dt = '2022-02-21'and type = 'bootstrap-insert') odon odt.order_id = od.idleft join(select distinct common.sid,common.sc source_idfrom edu2077.ods_log_inc oliwhere dt = '2022-02-21') logon od.session_id = log.sidleft join(select id,course_name,category_id,category_name,subject_id,subject_namefrom edu2077.dim_course_fullwhere dt = '2022-02-21') dim_courseon course_id = dim_course.id;

P056

--9.4 交易域下单事务事实表
--(2)每日装载
insert overwrite table edu2077.dwd_trade_order_detail_incpartition (dt = '2022-02-22')
select odt.id,order_id,user_id,course_id,course_name,category_id,category_name,subject_id,subject_name,province_id,date_id,session_id,source_id,create_time,origin_amount,coupon_reduce,final_amount,out_trade_no,trade_body
from (select data.id,data.order_id,data.user_id,data.course_id,date_format(data.create_time, 'yyyy-MM-dd') date_id,data.create_time,data.origin_amount,data.coupon_reduce,data.final_amountfrom edu2077.ods_order_detail_incwhere dt = '2022-02-22'and type = 'insert') odtleft join(select data.id,data.province_id,data.session_id,data.out_trade_no,data.trade_bodyfrom edu2077.ods_order_info_incwhere dt = '2022-02-22'and type = 'insert') odon odt.order_id = od.idleft join(select distinct common.sid,common.sc source_idfrom edu2077.ods_log_inc oliwhere dt = '2022-02-22') logon od.session_id = log.sidleft join(select id,course_name,category_id,category_name,subject_id,subject_namefrom edu2077.dim_course_fullwhere dt = '2022-02-22') dim_courseon course_id = dim_course.id;

P057

--9.5 交易域支付成功事务事实表DROP TABLE IF EXISTS dwd_trade_pay_detail_suc_inc;
CREATE EXTERNAL TABLE dwd_trade_pay_detail_suc_inc
(`id`                   STRING COMMENT '编号',`order_id`             STRING COMMENT '订单id',`user_id`              STRING COMMENT '用户id',`course_id`            STRING COMMENT '课程id',`province_id`          STRING COMMENT '省份id',`date_id`              STRING COMMENT '支付日期id',`alipay_trade_no`      STRING COMMENT '支付宝交易编号',`trade_body`           STRING COMMENT '交易内容',`payment_type`         STRING COMMENT '支付类型名称',`payment_status`       STRING COMMENT '支付状态',`callback_time`        STRING COMMENT '支付成功时间',`callback_content`     STRING COMMENT '回调信息',`original_amount`      DECIMAL(16, 2) COMMENT '原始支付金额分摊',`coupon_reduce_amount` DECIMAL(16, 2) COMMENT '优惠支付金额分摊',`final_amount`         DECIMAL(16, 2) COMMENT '最终支付金额分摊'
) COMMENT '交易域支付成功事务事实表'PARTITIONED BY (`dt` STRING)STORED AS ORCLOCATION '/warehouse/edu/dwd/dwd_trade_pay_detail_suc_inc/'TBLPROPERTIES ('orc.compress' = 'snappy');--(1)首日装载
set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table edu2077.dwd_trade_pay_detail_suc_incpartition (dt)
select odt.id,od.id,user_id,course_id,province_id,date_format(create_time, 'yyyy-MM-dd') date_id,alipay_trade_no,trade_body,payment_type,payment_status,callback_time,callback_content,origin_amount,coupon_reduce,final_amount,date_format(create_time, 'yyyy-MM-dd') date_id
from (select data.id,data.order_id,data.user_id,data.course_id,data.origin_amount,data.coupon_reduce,data.final_amount,data.create_timefrom edu2077.ods_order_detail_incwhere dt = '2022-02-21'and type = 'bootstrap-insert') odtleft join(select data.id,data.province_idfrom edu2077.ods_order_info_incwhere dt = '2022-02-21'and type = 'bootstrap-insert') odon odt.order_id = od.idjoin(select data.alipay_trade_no,data.trade_body,data.order_id,data.payment_type,data.payment_status,data.callback_time,data.callback_contentfrom edu2077.ods_payment_info_incwhere dt = '2022-02-21'and type = 'bootstrap-insert'and data.callback_time is not null) pion od.id = pi.order_id;select * from dwd_trade_pay_detail_suc_inc;

P058

--9.5 交易域支付成功事务事实表
-- (2)每日装载
insert overwrite table edu2077.dwd_trade_pay_detail_suc_incpartition (dt = '2022-02-22')
select odt.id,od.id,user_id,course_id,province_id,date_format(create_time, 'yyyy-MM-dd') date_id,alipay_trade_no,trade_body,payment_type,payment_status,callback_time,callback_content,origin_amount,coupon_reduce,final_amount
from (select data.id,data.order_id,data.user_id,data.course_id,data.origin_amount,data.coupon_reduce,data.final_amount,data.create_timefrom edu2077.ods_order_detail_incwhere (dt = '2022-02-22' or dt = date_add('2022-02-22', -1))and (type = 'insert' or type = 'bootstrap-insert')) odtleft join(select data.id,data.province_idfrom edu2077.ods_order_info_incwhere (dt = '2022-02-22' or dt = date_add('2022-02-22', -1))and (type = 'insert' or type = 'bootstrap-insert')) odon odt.order_id = od.idjoin(select data.alipay_trade_no,data.trade_body,data.order_id,data.payment_type,data.payment_status,data.callback_time,data.callback_contentfrom edu2077.ods_payment_info_incwhere dt = '2022-02-22'and type = 'update'and array_contains(map_keys(old), 'callback_time')) pion od.id = pi.order_id;

P059

9.6 流量域页面浏览事务事实表

P060

9.7 流量域启动事务事实表

P061

9.8 流量域动作事务事实表

9.9 流量域曝光事务事实表

9.10 流量域错误事务事实表

P062

9.11 互动域收藏事务事实表

P063

9.12 互动域章节评价事务事实表

9.13 互动域课程评价事务事实表

P064

9.14 考试域答卷事务事实表

9.15 考试域答题事务事实表

P065

9.16 学习域播放周期快照事实表

(1)首日装载

P066

9.16 学习域播放周期快照事实表

(2)每日装载

P067

9.17 学习域播放事务事实表

P068

9.18 用户域用户注册事务事实表

P069

9.19 用户域用户登录事务事实表

P070

9.20 数据装载脚本

9.20.1 首日装载脚本

9.20.2 每日装载脚本

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/88548.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lib61850 学习笔记一 (概念)

IEC61850 定义60多种服务满足变电站通信需求。支持在线获取数据模型&#xff0c;也支持IED水平通信&#xff08;GOOSE报文&#xff09; 术语定义 间隔 bay: 变电站由据应公共功能紧密连接的子部分组成。 例如 介于进线或者 出线 和母线之间的断路器&#xff1b;二条母线之间…

2023-08-28 LeetCode每日一题(插入区间)

2023-08-28每日一题 一、题目编号 57. 插入区间二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表。 在列表中插入一个新的区间&#xff0c;你需要确保列表中的区间仍然有序且不重叠&#xff08;如果有必要的…

CANOCO5.0实现冗余分析(RDA)最详细步骤

在地理及生态领域会常使用RDA分析&#xff0c;RDA的实现路径也有很多&#xff0c;今天介绍一下CANOCO软件的实现方法。 1.软件安装 时间调整到2010年 2.数据处理 得有不同的物种或者样点数值&#xff0c;再加上环境因子数据。 3.软件运行 4.结果解读 结果解读主要把握这几点…

Unity——音乐、音效

在游戏运行的过程中&#xff0c;音效的播放时机与游戏当前内容密切相关&#xff0c;而且随着场景的变化、剧情的推进&#xff0c;背景音乐也需要适时切换&#xff0c;所以恰当地控制音乐和音效的播放非常重要。音乐和音效的播放、停止、切换和音量变化等&#xff0c;都需要由脚…

CTFhub-sqli注入-报错注入

用到的函数 updatexml(1&#xff0c; &#xff0c;1) concat(0x7e, ,0x7e) group_concat(目标值) right(&#xff0c;32) 1 1 1 union select updatexml(1,concat(0x7e,database(),0x7e),1) 1 union select updatexml(1,concat(0x7e,(select(group_concat(ta…

内网穿透实战应用-windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …

继承AndroidView Model的错误

ViewModelProvider(this)[RegisterViewModel::class.java] 一行简单的代码&#xff0c;总是报这个错误 Caused by: java.lang.NoSuchMethodException: com.xinfa.registerlogin.viewmodel.LoginViewModel. [class android.app.Application] 经过一下午的思索&#xff0c;终于找…

大模型+学习机,是概念游戏还是双向奔赴?

众所周知&#xff0c;2023年上半年大模型概念炙手可热。各大科技公司纷纷卷入&#xff0c;或宣称布局相关领域&#xff0c;或率先官宣自研大模型。而随着资本市场对大模型概念的热情有所消退&#xff0c;属于这片战场的新一轮角逐慢慢聚焦在了技术的落地应用上。 8月15日&#…

JUC并发编程--------基础篇

一、多线程的相关知识 栈与栈帧 我们都知道 JVM 中由堆、栈、方法区所组成&#xff0c;其中栈内存是给谁用的呢&#xff1f;其实就是线程&#xff0c;每个线程启动后&#xff0c;虚拟 机就会为其分配一块栈内存。 每个栈由多个栈帧&#xff08;Frame&#xff09;组成&#xf…

C++--动态规划背包问题(1)

1. 【模板】01背包_牛客题霸_牛客网 你有一个背包&#xff0c;最多能容纳的体积是V。 现在有n个物品&#xff0c;第i个物品的体积为vivi​ ,价值为wiwi​。 &#xff08;1&#xff09;求这个背包至多能装多大价值的物品&#xff1f; &#xff08;2&#xff09;若背包恰好装满&a…

C#: Json序列化和反序列化,集合为什么多出来一些元素?

如下面的例子&#xff0c;很容易看出问题&#xff1a; 如果类本身的无参构造函数&#xff0c; 就添加了一些元素&#xff0c;序列化&#xff0c;再反序列化&#xff0c;会导致元素增加。 如果要避免&#xff0c;必须添加&#xff1a; new JsonSerializerSettings() { Object…

LNMT与动静分离 (四十八)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、LNMT 二、Nginx高级配置 2.1 location 2.2 rewirte 2.2.1 应用场景 2.2.2 书写位置 三、动静分离 总结 前言 LNMT是一个高级神经机器翻译系统&#xff0c;它使…