1、实时数仓与离线数仓的区别
1、架构上:实时数仓在离线数仓的基础上,数据集成改为实时的数据集成,例如采用canal、dts和消息中间件(kafka)来及时采集和更新数据。
2、数据处理上:增加了流式ETL和流式汇总。离线数据仓库主要采用T+1的方式处理数据,即第二天处理前一天的数据(这里可以是天,周或者是年,看具体业务情况)。而实时数仓则需要在秒级别内实现对数据的处理,因此通常情况下,会使用flink或spark streaming来计算数据,实现实时计算。
总结:实时数仓相较于离线数仓
数据来源,数仓抽象一样
时间粒度,计算模式不同
2、数仓建设
数仓的建模或者分层,其实就是为了更好地去组织、管理和维护数据,
优秀的分层设计能够让整个数据体系更容易理解和使用。
分层的意义:
1、清晰数据结构体系:每一个数据分层都有它的作用域,更方便定位数据 。
2、数据血缘追踪:如果某张表出了问题,可以快速地定位到问题 。
3、减少重复开发和资源浪费:可以通过开发一些通用的数据表,例如做宽表,减少重复计算 。
4、统一数据口径:数据分层提供了统一的数据出口,也就是应用层 。
*** 分层主要是为了解决ETL任务及工作流的组织、数据的流向、读写权限的控制、 不同需求的满足等各类问题。
3、实时数仓命名规范
3.1 数仓分层规范
类似于离线数仓,主要分为:ods原始数据层、dim维度层、dwd明细数据层、dwd数据汇合层和ads应用层,通过不同名称的来规范每个分层的表。
1、ods:基础数据层
这一层的数据最接近源数据,也是数仓的基础层
2、dwd:明细数据层:在dwd层会根据维度模型,涉及事实表和维度表
dwd层主要做的就是将数据清理、整合、规范化,
脏数据、垃圾数据、规范不一致、状态定义不一致的数据都会被处理。,将数据加工成面向数仓的基础明细表,这个时候可以做一些面向分析的宽表
* 维度建模一般分为四个步骤
选择业务过程-->声明粒度-->确认维度-->确认事实
3、dws:数据汇总层
是对dwd层上的基础数据,整合汇总成分析某一个主题域的服务数据。
4、dim:维度层
维度指的是观察事物的角度,提供某一业务过程事件涉及用什么过滤和 分类描述属性。“谁,什么时候,什么地点,为什么,如何”等。
比如,"小王早上在小卖部花费5元钱购买了包子",
时间维度——早上,地点维度——小卖部,商品维度——包子
维度表都包含单一的主键列,维度表设计的核心是确定维度字段,
维度字段是查询约束条件(where)、分组条件(group)、排序(order), 与报表标签的基本来源。
5、ads:数据应用层,用来存放指标结果。
3.2 表命名规范
表的命名也是为了清晰结构层次,总体设计是:层名_业务名_+具体细化。
每一层具体设计如下:
ODS | ods_{业务线名}_{源库名}_{源表名}[_incre] | rt(realtime)主要是区别于离线数仓,[_incre]可选,增量表标识 |
DIM | dim_{业务线名}_{源库名}_{源表名} | dim是指维度表,交易域表时用trade标识 |
DWD | dwd_{业务线名}_{域名}_{业务过程名}[_incre] | 业务过程是指业务 |
DWS | dws_{业务线名}_{域名}_{业务描述}_{周期限定}[_incre] | 统计周期是指聚合颗粒度,比如m、d、h、mis等 |
ADS | ads_{数据产品名}_[业务线名]_{域名}_{业务过程描述}_{统计周期}[_incre] | 经分为jf,罗盘为lp,公共表放在DWS |
3.3 数据总线主题命名
- 全局消息队列主题命名为Global_[域]_Topic,如Global_Role_Topic
- rdw_{实时数仓分},比如_dws_yxm_user_active_d是指按天去重的游戏猫玩家活跃明细实时消息队列,topic_dwd_yxm_order是指游戏猫订单明细宽表实时消息队列
3.4 消费组命名
数据产品名_域名_业务描述_测试/线上,比如dp_user_behavior_online是指大屏玩家行为线上消费组,和具体数据产品无关时采用global表示,消费组命名和表名解耦是考虑一个表数据可能来源于多个主题。