4.4 离线数仓—DWD层用户域事实表实现

大数据离线数仓DWD层用户域事实表设计与数据装载


前言

前面完成了流量域5张事务事实表的设计,下面继续进行DWD层用户域事务事实表的设计

一、用户域用户注册事务事实表

1.建表语句

DROP TABLE IF EXISTS dwd_user_register_inc;
CREATE EXTERNAL TABLE dwd_user_register_inc
(
    `user_id`        STRING COMMENT '用户ID',
    `date_id`        STRING COMMENT '日期ID',
    `create_time`    STRING COMMENT '注册时间',
    `channel`        STRING COMMENT '应用下载渠道',
    `province_id`    STRING COMMENT '省份id',
    `version_code`   STRING COMMENT '应用版本',
    `mid_id`         STRING COMMENT '设备id',
    `brand`          STRING COMMENT '设备品牌',
    `model`          STRING COMMENT '设备型号',
    `operate_system` STRING COMMENT '设备操作系统'
) COMMENT '用户域用户注册事务事实表'
    PARTITIONED BY (`dt` STRING)
    STORED AS ORC
    LOCATION '/warehouse/gmall/dwd/dwd_user_register_inc/'
    TBLPROPERTIES ("orc.compress" = "snappy");

2.首日数据装载

set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table dwd_user_register_inc partition(dt)
select
    ui.user_id,
    date_format(create_time,'yyyy-MM-dd') date_id,
    create_time,
    channel,
    province_id,
    version_code,
    mid_id,
    brand,
    model,
    operate_system
### 离线数据仓库 DWD 的作用及功能介绍 #### 1. 数据清洗与结构化 DWD(Data Warehouse Detail)是离线数据仓库中承上启下的重要次,其主要作用是对 ODS(Operational Data Store)中的原始数据进行清洗、转换和结构化处理[^1]。通过去除无效数据、修正错误数据以及补充缺失字段,DWD 能够为后续的数据分析提供高质量的基础数据支持。 #### 2. 数据去重与一致性保证 在数据装载过程中,DWD 会确保数据的一致性和完整性。例如,在购物车周期快照事实表实现中,通过过滤条件 `is_ordered='0'` 和指定日期分区 `dt='2020-06-14'`,可以有效避免重复数据的加载,并保持数据的时间维度一致性。 #### 3. 数据分区与存储优化 为了提高查询效率和降低存储成本,DWD 通常会对数据进行分区管理,例如按照日期字段 `dt` 进行分区。此外,DWD 还会采用压缩技术(如 LZO 压缩算法)来减少存储空间占用,同时保持较高的查询性能[^2]。 #### 4. 数据模型规范化 DWD 的设计遵循严格的数据建模规范,旨在为后续的 DWS(Data Warehouse Summary)和 ADS(Application Data Service)提供清晰、一致的数据结构[^2]。例如,在流量页面浏览事务事实表实现中,DWD 会定义详细的建表语句,并明确各字段的含义和用途[^3]。 #### 5. 数据生命周期管理 DWD 的数据通常具有较长的生命周期,可能保留多年甚至永久保存。这种设计是为了满足历史数据分析的需求,同时也便于追溯数据来源和变化过程。 #### 6. 支持多维度分析 DWD 通过对不同业务(如交易、流量等)的事实表进行建模,能够为多维度分析提供丰富的数据支持。例如,流量中的页面浏览、启动、动作、曝光和错误等事务事实表分别记录了用户行为的不同方面,从而为精细化运营提供了数据基础[^3]。 ```sql -- 示例:DWD 数据装载语句 insert overwrite table dwd_trade_cart_full partition(dt='2020-06-14') select id, user_id, sku_id, sku_name, sku_num from ods_cart_info_full where dt='2020-06-14' and is_ordered='0'; ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值