业务数据方面 DWD 层的搭建主要注意点在于维度建模,减少后续大量 Join 操作。

1. 商品维度表(全量)

商品维度表主要是将商品表 SKU 表、商品一级分类、商品二级分类、商品三级分类、
商品品牌表和商品 SPU 表联接为商品表。
1)建表语句
hive (gmall)>
DROP TABLE IF EXISTS `dwd_dim_sku_info`;
CREATE EXTERNAL TABLE `dwd_dim_sku_info` (
`id` string COMMENT '商品 id',
`spu_id` string COMMENT 'spuid',
`price` decimal(16,2) COMMENT '商品价格',
`sku_name` string COMMENT '商品名称',
`sku_desc` string COMMENT '商品描述',
`weight` decimal(16,2) COMMENT '重量',
`tm_id` string COMMENT '品牌 id',
`tm_name` string COMMENT '品牌名称',
`category3_id` string COMMENT '三级分类 id',
`category2_id` string COMMENT '二级分类 id',
`category1_id` string COMMENT '一级分类 id',
`category3_name` string COMMENT '三级分类名称',
`category2_name` string COMMENT '二级分类名称',
`category1_name` string COMMENT '一级分类名称',
`spu_name` string COMMENT 'spu 名称',
`create_time` string COMMENT '创建时间'
) COMMENT '商品维度表'
PARTITIONED BY (`dt` string)
stored as parquet
location '/warehouse/gmall/dwd/dwd_dim_sku_info/'
tblproperties ("parquet.compression"="lzo");

2)数据装载

hive (gmall)>
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
insert overwrite table dwd_dim_sku_info partition(dt='2020-06-14')
select
sku.id,
sku.spu_id,
sku.price,
sku.sku_name,
sku.sku_desc,
sku.weight,
sku.tm_id,
ob.tm_name,
sku.category3_id,
c2.id category2_id,
c1.id category1_id,
c3.name category3_name,
c2.name category2_name,
c1.name category1_name,
spu.spu_name,
sku.create_time
from
(
select * from ods_sku_info where dt='2020-06-14'
)sku
join
(
select * from ods_base_trademark where dt='2020-06-14'
)ob on sku.tm_id=ob.tm_id
join
(
select * from ods_spu_info where dt='2020-06-14'
)spu on spu.id = sku.spu_id
join
(
select * from ods_base_category3 where dt='2020-06-14'
)c3 on sku.category3_id=c3.id
join
(
select * from ods_base_category2 where dt='2020-06-14'
)c2 on c3.category2_id=c2.id
join
(
select * from ods_base_category1 where dt='2020-06-14'
)c1 on c2.category1_id=c1.id;
3)查询加载结果
hive (gmall)> select * from dwd_dim_sku_info where dt='2020-06-14' limit 2;
2.优惠券维度表(全量)
把 ODS 层 ods_coupon_info 表数据导入到 DWD 层优惠卷维度表,在导入过程中可以做
适当的清洗。
1)建表语句
hive (gmall)>
drop table if exists dwd_dim_coupon_info;
create external table dwd_dim_coupon_info(
`id` string COMMENT '购物券编号',
`coupon_name` string COMMENT '购物券名称',
`coupon_type` string COMMENT '购物券类型 1 现金券 2 折扣券 3 满减券 4 满件打折券',
`condition_amount` decimal(16,2) COMMENT '满额数',
`condition_num` bigint COMMENT '满件数',
`activity_id` string COMMENT '活动编号',
`benefit_amount` decimal(16,2) COMMENT '减金额',
`benefit_discount` decimal(16,2) COMMENT '折扣',
`create_time` string COMMENT '创建时间',
`range_type` string COMMENT '范围类型 1、商品 2、品类 3、品牌',
`spu_id` string COMMENT '商品 id',
`tm_id` string COMMENT '品牌 id',
`category3_id` string COMMENT '品类 id',
`limit_num` bigint COMMENT '最多领用次数',
`operate_time` string COMMENT '修改时间',
`expire_time` string COMMENT '过期时间'
) COMMENT '优惠券维度表'
PARTITIONED BY (`dt` string)
stored as parquet
location '/warehouse/gmall/dwd/dwd_dim_coupon_info/'
tblproperties ("parquet.compression"="lzo");
2)数据装载
hive (gmall)>
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
insert overwrite table dwd_dim_coupon_info partition(dt='2020-06-14')
select
id,
coupon_name,
coupon_type,
condition_amount,
condition_num,
activity_id,
benefit_amount,
benefit_discount,
create_time,
range_type,
spu_id,
tm_id,
category3_id,
limit_num,
operate_time,
expire_time
from ods_coupon_info
where dt='2020-06-14';

3)查询加载结果
hive (gmall)> select * from dwd_dim_coupon_info where dt='2020-06-14' limit 2;
3 活动维度表(全量)

1)建表语句
hive (gmall)>
drop table if exists dwd_dim_activity_info;
create external table dwd_dim_activity_info(
`id` string COMMENT '编号',
`activity_name` string COMMENT '活动名称',
`activity_type` string COMMENT '活动类型',
`start_time` string COMMENT '开始时间',
`end_time` string COMMENT '结束时间',
`create_time` string COMMENT '创建时间'
) COMMENT '活动信息表'
PARTITIONED BY (`dt` string)
stored as parquet
location '/warehouse/gmall/dwd/dwd_dim_activity_info/'
tblproperties ("parquet.compression"="lzo");
2)数据装载
hive (gmall)>
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
insert overwrite table dwd_dim_activity_info partition(dt='2020-06-14')
select
id,
activity_name,
activity_type,
start_time,
end_time,
create_time
from ods_activity_info
where dt='2020-06-14';
3)查询加载结果
hive (gmall)> select * from dwd_dim_activity_info where dt='2020-06-14' limit 2;
4 地区维度表(特殊)
1)建表语句
hive (gmall)>
DROP TABLE IF EXISTS `dwd_dim_base_province`;
CREATE EXTERNAL TABLE `dwd_dim_base_province` (
`id` string COMMENT 'id',
`province_name` string COMMENT '省市名称',
`area_code` string COMMENT '地区编码',
`iso_code` string COMMENT 'ISO 编码',
`region_id` string COMMENT '地区 id',
`region_name` string COMMENT '地区名称'
) COMMENT '地区维度表'
stored as parquet
location '/warehouse/gmall/dwd/dwd_dim_base_province/'
tblproperties ("parquet.compression"="lzo");
2)数据装载
hive (gmall)>
SET hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;
insert overwrite table dwd_dim_base_province
select
bp.id,
bp.name,
bp.area_code,
bp.iso_code,
bp.region_id,
br.region_name
from
(
select * from ods_base_province
) bp
join
(
select * from ods_base_region
) br
on bp.region_id = br.id;
3)查询加载结果

hive (gmall)> select * from dwd_dim_base_province limit 2;
5 时间维度表(特殊)
1)建表语句
hive (gmall)>
DROP TABLE IF EXISTS `dwd_dim_date_info`;
CREATE EXTERNAL TABLE `dwd_dim_date_info`(
`date_id` string COMMENT '日',
`week_id` string COMMENT '周',
`week_day` string COMMENT '周的第几天',
`day` string COMMENT '每月的第几天',
`month` string COMMENT '第几月',
`quarter` string COMMENT '第几季度',
`year` string COMMENT '年',
`is_workday` string COMMENT '是否是周末',
`holiday_id` string COMMENT '是否是节假日'
) COMMENT '时间维度表'
stored as parquet
location '/warehouse/gmall/dwd/dwd_dim_date_info/'
tblproperties ("parquet.compression"="lzo");
2)把 date_info.txt 文件上传到 hadoop102 的/opt/module/db_log/路径
3)数据装载
注意:由于 dwd_dim_date_info 是列式存储+LZO 压缩。直接将 date_info.txt 文件导入到
目标表,并不会直接转换为列式存储+LZO 压缩。我们需要创建一张普通的临时表
dwd_dim_date_info_tmp,将 date_info.txt 加载到该临时表中。最后通过查询临时表数据,把
查询到的数据插入到最终的目标表中。
(1)创建临时表,非列式存储
hive (gmall)>
DROP TABLE IF EXISTS `dwd_dim_date_info_tmp`;
CREATE EXTERNAL TABLE `dwd_dim_date_info_tmp`(
`date_id` string COMMENT '日',
`week_id` string COMMENT '周',
`week_day` string COMMENT '周的第几天',
`day` string COMMENT '每月的第几天',
`month` string COMMENT '第几月',
`quarter` string COMMENT '第几季度',
`year` string COMMENT '年',
`is_workday` string COMMENT '是否是周末',
`holiday_id` string COMMENT '是否是节假日'
) COMMENT '时间临时表'
row format delimited fields terminated by '\t'
location '/warehouse/gmall/dwd/dwd_dim_date_info_tmp/';
(2)将数据导入临时表
hive (gmall)>
load data
local
inpath '/opt/module/db_log/date_info.txt' into table
dwd_dim_date_info_tmp;
(3)将数据导入正式表
hive (gmall)>
insert overwrite table dwd_dim_date_info select * from dwd_dim_date_info_tmp;
4)查询加载结果
hive (gmall)> select * from dwd_dim_date_info;

(37)DWD 层(业务数据)相关推荐

  1. 【电商数仓】数仓搭建之明细数据(data warehouse detail -- DWD)层(用户行为数据之曝光、错误日志表、数据加载脚本,业务数据之评价、订单事实表)

    文章目录 一 曝光日志表 1 思路解析 2 建表语句 3 数据导入 4 查看数据 二 错误日志表 1 思路解析 2 建表语句 3 数据导入 4 查看数据 三 DWD层用户行为数据加载脚本 四 DWD层 ...

  2. Hive的dwd层建表语句及加载数据

    数仓-DWD层 1)对用户行为数据解析. 2)对业务数据采用维度模型重新建模. 订单明细事实表(事务型事实表) 建表语句: DROP TABLE IF EXISTS dwd_order_detail; ...

  3. 数仓学习笔记(5)——数仓搭建(DWD层)

    目录 一.数仓搭建--DWD层 1.DWD层(用户行为日志) 1.1 日志解析思路 1.2 get_json_object函数使用 1.3 启动日志表 1.4 页面日志表 1.5 动作日志表 1.6 ...

  4. 从0到1搭建数仓DWD层案例实践

    关注公众号:大数据技术派,回复资料,领取1024G资料. 然后点击右上角 "设为星标" 比别人更快接收好文章 前 导读:数仓架构(ods-dwd-dws-ads)每一层之前我们已经 ...

  5. 数仓搭建——DWD层

    1 DWD层(用户行为日志) 1.1 日志解析思路 页面埋点日志 启动日志 思路 1.2 get_json_object函数使用 数据 [{"name":"大郎" ...

  6. 电商数仓(dwd 层)

    一.dwd 层介绍 1.对用户行为数据解析. 2.对核心数据进行判空过滤. 3.对业务数据采用维度模型重新建模,即维度退化. 二.dwd 层用户行为数据 2.1 用户行为启动表 dwd_start_l ...

  7. 离线数仓 (十三) --------- DWD 层搭建

    目录 前言 一.DWD 层 (用户行为日志) 1. 日志解析思路 2. get_json_object 函数使用 3. 启动日志表 4. 页面日志表 5. 动作日志表 6. 曝光日志表 7. 错误日志 ...

  8. 10.数据仓库搭建之DWD层搭建

    数据仓库搭建之DWD层搭建 我们在设计项目中DWD层时,需要注意以下几点: 1)DWD层的设计依据维度建模理论,该层存储维度模型当中的事实表. 2)DWD层的数据存储格式为ORC列式存储结合snapp ...

  9. 大数据Flink电商实时数仓实战项目流程全解(六)DWM层业务实现

    项目概要 之前我们已经通过动态分流把数据分到了我们想要的位置,为了方便后续内容的讲解方便,所以接下来我们可以把配置表的信息进行导入了,然后通过动态分流的方法,把数据发往对应的kafka主题或者是hba ...

  10. 数据仓库搭建DWD层

    本篇只是DWD层,其他内容请关注我的博客!在<项目>专栏里!!! 本篇文章参考尚硅谷大数据项目写成! 目录 一.用户行为日志 1.1日志格式 1.2get_json_object函数使用 ...

最新文章

  1. 2019南昌网络赛 C题,Hello 2019
  2. java离职交接文档_离职了就没责任?会计离职没办这2项交接,要承担法律责任!...
  3. Qt中的QTimer
  4. 开源!《模式识别与机器学习(PRML)》笔记、代码、NoteBooks 发布
  5. Exynos4412 Uboot 移植(六)—— 相关知识补充
  6. Win11将沿用Win10升级模式 并会有LTSC版本
  7. 快应用quickapp快速入门教程 by五个半柠檬
  8. jQuery 事件方法(交互)
  9. 周末计划-20171028
  10. java.lang.instrument 中的premain 实现类的个性化加载(附源代码)
  11. consul 服务发现 集群 docker 版
  12. php 获取access token,百度应用获取Access Token
  13. ASCII 控制符意义说明
  14. c 计算机操作步进器,雷赛_数字步进电机与驱动器_DM2C-RS556型号
  15. NUAA第四届“节能小屋”大赛工艺组“一等奖”作品——新能源智慧食堂
  16. zemax准直透镜_基于ZEMAX的半导体激光器非球面准直透镜设计.PDF
  17. 软件工程师必备的简历模板
  18. 秋在季节轮回里,你在思念绽放中
  19. 《农业机械学报》论文的格式要求
  20. 通过阿里云ECS服务器部署FRP实现Windows自带远程桌面

热门文章

  1. 【<HTTP专题>】
  2. 如何使用DiVa测试UDS On DoIP
  3. [分布式系统]全面介绍分布式系统
  4. 如何提高App的下载量
  5. SQL SERVER练习题及答案2
  6. pythonrequests爬虫怎么用_python爬虫之requests的高级使用
  7. HTML5期末大作业:动漫网站设计——火影忍者动漫(7页) HTML+CSS+JavaScript 漫画网页制作作业_电影网页设计...
  8. 拥有谷歌100万股原始股,奥尼尔每年能够得到多少分红?
  9. 【解决方案】阿里企业云邮箱 报错 526 Authentication failure[0]
  10. HTML 六十二 实例