1、DWD层概述
1.1、DWD层定义
- 数据明细层:此层数据需要按照主题域存放
1.2、DWD层数据组成
(1)DWD层一般是对ODS层的业务主题进行加工和划分,表中记录的仍然是明细数据
(2)从ODS层抽取需要的数据where,数据量级会减少,但不会做聚合操作
1.3、DWD层表结构&生命周期
(1)表结构:通用字段+通用扩展字段
(2)命名规则:dwd_业务表名称__1h
- 前缀统一为dwd,后缀统一(小时级别为h,天级别为1d,月级别为1m)
(3)生命周期:92天
2、DWD层数据处理方式
2.1、异常数据处理
包括但不限于空值,脏值,超过尝试极限范围值。
2.2、参数解析
将常用字段从JSON或者文本中解析成独立的可使用字段,同时保留原始Json字段,供临时需求分析使用
2.3、原子指标加工
将埋点的事件转换为原子指标,方便下游筛选或者汇总累加,比如eventcode=dt_click,转化为clk_pv=1,
注意:不做任何程度聚合,只是进行最基本指标加工
2.4、生成部分DIM表
对于依赖客户端&后台上报的维度属性,生成同一的维度表
3、DWD层开发样例
绪论、需求说明
- 将ODS上报数据增量量抽取到DWD层,按天分区
create table ods.ods_ios_di(
p_date string
,etl_time string
,server_ip string
,log_time string
,guid string
,search_words string
,age String
,city String
,phone string
,appid string
,msgid string
,httpcode string
,httpcontent string
,msg string
)
partitioned by (`pt` string)
row format delimited fields terminated by ',';
3.1、创建Hive目标表
(1)编写建表脚本
CREATE TABLE dwd.dwd_ios_di(
p_date STRING COMMENT '分区日期',
etl_time STRING COMMENT '数据加载时间',
guid STRING COMMENT '客户端唯一标识',
guid_pv STRING COMMENT 'qv',
msgid STRING COMMENT '客户端消息id',
prod_type BIGINT COMMENT '产品类型{1:产品A;2:产品B;99:其他}',
busi_type BIGINT COMMENT '业务类型{1:xs;2:zx;3:sp;4:xcx;......99:其他}',
server_ip STRING COMMENT '服务器ip',
log_time STRING COMMENT '日志时间',
phone STRING COMMENT '手机相关信息',
httpcode STRING COMMENT 'http返回码',
httpcontent STRING COMMENT '下发状态码(0代表成功,其余代表失败,具体失败原因因厂商不同而不同)'
)
partitioned by (`pt` string)
row format delimited fields terminated by ',';
(2)配置SQL组件创建表
- 数据源:hive(dwd)
- sql类型:非查询
(3)部署上线运行
- 部署上线
- 进入画布单独运行建表脚本
3.2、测试数据
(1)编写业务处理逻辑脚本
- 处理逻辑:数据转换(加密、标准化)、异常值处理
insert overwrite table dwd.dwd_ios_di partition (pt=${pt})
select
${pt} as pt
,from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as etl_time
-- 进行md5加密
,md5(guid,msgid) as push_id
,guid as guid
-- 进行原子指标加工
,"1" as guid_pv
,msgid as msgid
-- 进行数据标准化
,case when appid not in ('11','12','13','14','22') then 1 else 2 end as prod_type
,case
when appid ='111' and length(msgid)=7 then 1
when appid in ('10','11','12') and length(msgid) >7 then 2
when appid ='13' then 3
when appid ='13' then 4
when appid in ('20','21','22','23') then 5
else 99
end as busi_type
,appid as appid
,server_ip as server_ip
,log_time as log_time
,phone as phone
,httpcode as httpcode
,httpcontent as httpcontent
,msg as msg
from
(
select
server_ip
,log_time
,guid
,module
,appid
,msgid
,httpcode
,httpcontent
,msg
,row_number() over(partition by guid,msgid order by log_time asc) as rank
from ods.ods_ios_di
where pt=${pt} and guid RLIKE '^[4-9A-Z]{24}$'
-- 进行数据过滤,将非本业务集市数据剔除
and httpcode = 200 and module not in (1,2,3)
) t1
where rank=1
(3)配置依赖
- 告警策略:超时告警、超时失败。
- 依赖周期:日、今天
(4)运行调试
- 部署上线
- 进入画布,运行链路
- 补数,跑一周数据后进行对数
- 串行执行:资源不足时使用
- 并行执行:资源充足时使用
3.3、定时调度
(1)调度周期
- 每天凌晨6点调度前一天数据
(2)失败策略
- 失败策略:结束
(3)通知策略
- 通知策略:失败发