数据仓储是什么?
定义
数据仓库(data warehouse,也称企业数据仓库)用于报告和数据分析的系统,被认为是商业智能的核心组件。数据仓库来自一个货多个不同源的继承数据的中央存储库。数据仓库将当前和历史数据存储在一起,用于为整个企业的员工创建分析报告;
特点
- 面向主题:根据业务诉求,建相同业务意义归档至同一个主题区,如划分为客户、商品、营销、订单、配送等;
- 集成的:数据来自企业各个OLTP生产系统,将所需数据从各OLTP生产系统出去出来进行架构和集成、统一和综合之后进入数仓;
- 时间差异性:数仓随时间变化而变化,可追溯,能较好满足应用的需求;
- 不可更新:数仓为决策分析提供数据,主要操作为数据统计分析;
核心是模型,模型的设计要按照业务需要设计;
位置
京东数仓对接生产系统数据,并向及时货应用提供支撑。
京东数据及时建设有两种
1,独立数据集市: 从数据采集开始完全独立构建;
2, 从属数据集市:数据集市建立在数仓之上,是数仓的一个子级(大多数业务建设方式)
JD数据仓库架构
JD数仓分层架构
数仓一共分为五层:
缓冲数据层,Buffering Data Model, BDM,源系统的数据,生产系统的快照,保存明细数据,按天分区,会保持最近一段时间的数据。通常一个BDM表对应源业务的一个表,或一个日志文件,数据结构和线上基本对应的;
基础数据层, Fundamental Data Model FDM,也称贴源数据层,保存源业务系统数据快照,一般不对外开放;会做拉链表设计
通用数据层, General Data Model, GDM,负责统一的数据清洗,整合,实现各主题的数据标准化,屏蔽生产系统干扰,保障基础数据高可用;
聚合数据层, Aggregative Data Model, ADM,口径封装层, 负责统一的数据口径封装,提供各主题统一维度和指标的最细力度数据,为各业务方提供统一口径的共享数据服务;
应用数据层, APP,面相应用场景,提供特定场景的聚合数据;
维度层:DIM,用户分析数据的窗口,维度表包含事实数据表中事实记录的特性;
临时层:TMP, temp,降低加工过程的计算难度,提供运行效率的临时表,用完即舍,不保存历史数据;
中间层: ODM,用来封装清洗转换逻辑,保存清洗后的数据,供加工通用模型使用。保留历史数据
数仓模型设计流程
- 需求申请
- 需求调研
- 数据探查
- 模型设计
- MAPPING设计
- 脚本编写
- 任务测试和魔心数据验证
- 模型完善
- 模型上线
- 魔心运营
数仓表的介绍
拉链表
查询
获取最新数据:
select * from fdm_xx_table_chain where dp='AVTIVE';
select * from fdm_xx_table_chain where start_date <= sysdate(-1) and end_date > sysdate(-1);
获取历史数据:如获取16年12月1号数据
select * from fdm_xx_table_chain where start_date <= '2016-12-01' and end_date > '2016-12-01';
常见错误写法:
select * from fdm_xx_table_chain where dt = '2016-12-01';
注意:
1, 拉链表不建议用dt分区
2, start_date是字段而不是分区;
流水表
获取当前日期数据: select * from fdm_xx_table where dt = '2017-01-04';
获取2020-01-01到现在的数据: select * from fdm_xx_table where dt >= '2020-01-01';
说明: fdm流水表查询一般通过 dt + 业务日期字段配合使用;
拉链表和流水表对比
全量表
在使用GDM全量时,一定要指定分区,严谨不指定分区使用全量表;
增量表
增量表分为普两类
1,普通增量,gdm_online_log, 分区为dt,普通增量表的使用和fdm层流水表一致;
2,归档逻辑增联, gdm_m04_ord_sum, 分区为dp,dt
说明: 不同的gdm增量表偶不同的归档原则,例如订单gdm根据订单的数据不定期归档;大部分gdm按照30,90,180天进行归档;