转之https://www.jianshu.com/p/f941967aeee8

 

分层案例

尽管行业不同,套路却差不多。本次借鉴互联网分层模型,使用HIVE作为数据仓库,搭建数据平台。

专业术语

ODL层 (Operational Data Layer):操作数据层

BDL层 (Base Data Layer):基础数据层

IDL层 (Interface Data Layer):接口层,也称主题表,宽表

ADL层(Application Data Layer):应用层 ,也称数据集市

DIC层(Dictionary Data Layer):字典层

TMP层(Temporary Data Layer):临时层

 
分层模型

简要说明

此外,大家可能经常听到“星型模型”和“雪花模型”,简单解释下

(1)星型模型:事实表+维度表(区域、类目、性别...)等多表通过预先JOIN冗余到一张宽表里去,常见IDL层。

(2)雪花模型:在计算的时候,才将事实表跟维度表做join。

现在一般都是采用(1)的模式,为什么呢? 预先计算,挺高性能,避免后续重复计算。CPU和内存的资源永远比磁盘空间宝贵的多。至于(2)的方式,有点就是灵活,不需要太多的重复清洗,但是性能不如(1).

建设思路

开发步骤

HIVE开发规范

Hive数据来源主要几种:(1)关系型数据仓库导入 (2)HDFS存储的Log数据
(3)Flume sink过来的

数据的生产者:Ngnix log日志、业务系统埋点、监控日志、kafka 等

业务系统埋点的JSON格式 参考 《埋点-JSON格式通用》

表命名规范

特别的

外部表和内部表

每个表增加个dt时间分区是个好习惯

insert into 和 insert overwrite

 insert overwrite TABLE idl_event PARTITION (dt='${dt}')
select  * from  odl_event   o where  o.dt='${dt}'

idl_event表dt的含义是根据odl_event表达dt决定的,若dt只是一天的增量数据 ,那么idl_event的dt也仅仅是一天的增量。若odl_event的dt表示全量数据,那么idl_event的dt,每一个dt都是表示全量数据。

示例场景:当发现T日的增量数据清洗有误,需重清洗,则可以使用上面的语句,避免T日以前的数据也被覆盖掉。

boolean类型

金额单位

日期格式

字段“type”和status

表字段名称

合适需要创建分区partition

数据倾斜与优化

某些字段计算时,归属哪一层

清洗使用HIVE,查询请借助Impala

02-14 02:28