ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

【大数据课程】高途课程实践-Day02:利用Hive SQL编写离线数仓实现可视化展示

2022-02-27 23:02:02  阅读:211  来源: 互联网

标签:comment 数仓 string deal -- 离线 课程 id stock


〇、概述

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;

 

标签:comment,数仓,string,deal,--,离线,课程,id,stock
来源: https://www.cnblogs.com/liujinhui/p/15941059.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有