数据仓库中的数据表,往往是分层管理、分层计算的;
所谓分层,具体来说,就是将大量的数据表按照一定规则和定义来进行逻辑划分;
- ADS层: 应用服务层
- DWS层:数仓汇总层
- DWD层:数仓明细层
- ODS层:操作数据(最原始的数据)层 -- 贴源层
- DIM层:存储维表
ODS层:对应着外部数据源ETL到数仓体系之后的表!
DWD层:数仓明细层;一般是对ODS层的表按主题进行加工和划分;本层中表记录的还是明细数据;
DWS层:数仓汇总层;
ADS层: 应用层,主要是一些结果报表!
分层的意义:数据管理更明晰!运算复用度更高!需求开发更快捷!便于解耦底层业务(数据)变化!
ODS:操作数据层
- 主要作用:直接映射操作数据(原始数据),数据备份;
- 建模方法:与原始数据结构保持完全一致
- 存储周期:相对来说,存储周期较短;视数据规模,增长速度,以及业务的需求而定;对于埋点日志数据ODS层存储,通常可以选择3个月或者半年;存1年的是土豪公司(或者确有需要)
DWD层:数仓明细层
- 数据内容:对ODS层数据做ETL处理后的扁平化明细数据
- 存储格式:以orc/parquet文件格式存储
- 存储周期6个月
需求
清洗过滤
- 去除json数据中的废弃字段(前端开发人员在埋点设计方案变更后遗留的无用字段)
- 过滤json格式不正确的(脏数据)
- 过滤deviceid及account为空的记录
- 过滤缺少关键字段的记录
- 过滤日志中时间段错误的记录
- 过滤爬虫请求(通过useragent标识来分析)
数据解析
将json打平,解析称扁平格式
SESSION分割
数据规范处理
boolean,null,日期...
维度集成
gbs解析
GEOHASH码
IP解析
ip2region
ID_MAPPING
为每一个用户生成一个全局唯一标识
- 只使用设备ID
适用场景:适合没有用户注册体系,或者极少数用户会进行多设备登录的产品,如工具类产品、搜索引擎、部分小型电商等
- 关联设备ID和登录ID(一对一)
成功关联设备 ID 和登录 ID 之后,用户在该设备 ID 上或该登录 ID 下的行为就会贯通,被认为是一个 全局 ID 发生的。在进行事件、漏斗、留存等用户相关分析时也会算作一个用户
- 关联设备ID和登录ID(多对一)
一个用户在多个设备上进行登录是一种比较常见的场景,比如 Web 端和 App 端可能都需要进行登录。支持一个登录 ID 下关联多设备 ID 之后,用户在多设备下的行为就会贯通,被认为是一个ID 发生的
- 关联设备ID和登录ID(动态修正)
基本原则,与方案3相同
修正之处,一个设备ID被绑定到某个登陆ID(A)之后,如果该设备在后续一段时间(比如一个月内)被一个新的登陆ID(B)更频繁使用,则该设备ID会被调整至绑定登陆ID(B)
新老访客标记
如果数据量过大,可以使用reduce端join实现,或bloomfilter实现
结果保存
数据输出为parquet格式,压缩编码用snappy
DWS层
对数据做轻度聚合
- 流量概况主题
按照guid,sessionid求起始时间,结束时间,访问页数,新老标记,地域,入口页,跳出页
逻辑:按照guid,sessionid分组得到起始,结束时间,新老标记,访问页数,LEFT JOIN窗口guid,sessionid ORDER BY timestamp
ADS
纬度建模
- 星型模式
- 雪花模型
- 星座模型