不同企业存在差异,例如:命名不一样,或者是定制的,主流以阿里的参考
ETL,ODS,CDM(DWS,DWD),ADS
从业务数据库(即数据源)抽取数据extract
交互转换:进行清洗一级标准化transform
加载load
使用的工具:Sqoop,Kettle,Flume/Logstash(日志,文件等非结构化,半结构化的数据)
ODS,英文Operational Data Store,操作数据源层。因为业务数据库定期会删历史数据,这一层与原始数据保持一致,后续如果要用历史数据可以从ODS层查找,目的是为了存储原始数据,体现数据仓库非易失性。
是为数据分析提供服务的
(1) 是接收ODS层数据的一层数据,由于ODS层数据格式不统一,DWD会对其进行清洗,标准化,统一规范:剔除异常数据,做一些统一的编码,字段的描述,并存储到DWD层,即是统一规范后的数据了(一般为零散表和业务系统差不多,不足以提供数据分析)
(2) 满足三范式的数据
(1) 按照主题进行汇总跟聚合成一张大宽表,满足特定主题和纬度的分析
(2) 已经脱离三范式(范式数据资料百度补充),是为了提升数据分析的性能,后续在宽表上进行数据建模,以模型方式保存,数据仓库建模就是在这一层
ETL规则的设计和实施约占百分之60-80
可抽结构化数据,非结构化数据,半结构化数据
抽取工具:
(1)结构化:
①采用JDBC连接到数据库进行抽取,这种方式采用直连,会增加数据库的IO与负载,造成对原来业务的影响,所以一般会在凌晨的时候业务量时进行抽取,但是存在局限性,例如:金融行业中有的不允许对库抽,是考虑到安全和业务的稳定。
②抽取数据库日志,这种非直接连接数据库,日志存在本地的磁盘中,直接采集数据库的WAL(预写日志文件),对数据库影响较小, 不走数据库前端,但是采集到日志数据需要解析后(工具:Oracle使用的OGG,其他数据库支持的CDC),才能获取到数据
(2)非结构化数据,半结构化数据:比如日志,json,以文件形式存在,只要监控文件是否发生变动,并抽取就可以了
3.抽取方式:
(1)全量同步:业务数据库有多少数据,全抽出来导入数据仓库中,一般用于初始化的数据装载(数仓刚搭建的时候)
(2)增量同步:检测每天的数据变动,抽取发生变动的数据,这种方式花费时间就会少一些,压力也就更小了
①清洗:重复,二义性,不完整,违反业务逻辑
②转换:标准化处理,违反字段,数据类型,数据定义的转换
处理的数据导入到对应的目标源中,这样这样就是把数据放到了ODS层
①Sqoop:常见,通过JDBC连接数据库并抽取,使用并发处理的形式,批量导入到大数据的数据仓库里
②Kettle:可视化界面,开源免费
③Datastage:收费商业,贵
④Informatica:收费商业,贵
⑤Kafka:消息队列,也可以提供ETL 的功能
①Flume:老牌,可以对文件对端口等数据进行监控,抽取变动数据
②Logstash:属于Elastic家族的,做日志,文件监控的
1.数据和原业务数据库保持一致,可以增加字段来进行管理(ODS是原数据库的一个扩充集)
2.如何区分数据是修改的还是新增的:
(1)增量数据先和ODS中的表进行join,没有join成功的就是新增的,join成功肯定是更新数据,没成功就是修改的,把更新的数据update_type把变成update,然后把新增的、修改的都统一追加到ODS层
但是有个问题,如果业务数据库那边更新近期数据比较频繁,会导致数仓的冗余
(2)外连接&全覆盖:
此方式企业用的比较多了,在更新数据比较多的情况下,增量数据和历史数据做一个全外连接,这样就可以判断哪一些是新增的,哪一些是修改的,修改的在内存中直接修改点,把原来ODS数据给覆盖掉,这样就是和业务数据库一致了,并且没有冗余!!
1.主要对ODS数据进行清洗,标准化,纬度退化(时间,分类,地域),
(1)分类
这些维表在做数据分析时会效率会很低,因为join操作会引起大量数据的移动(应该就是经常会说到的shuffle),所以在DWD这一层会做一个维度的退化,把三张维表全部合并到主表中来,合并结果会增加一些字段(维表字段)
(2)地域
例如来自不用地域的字段相同的用户表,汇总成一张表,地域字段city,分析运算的性能也就提升了
2.依然满足三范式模型:只不过做了一些基础的纬度退化
1.把数据明细层DWD干净的数据,仍然符合三范式的零散的表,聚集汇总成主题表(大宽表),体现了数据仓库面向主题的特性
2.脱离了三范式,在大数据数仓中就是宽表了,在传统数仓还要建模(例如纬度建模),其实宽表也是模型叫宽表模型,是数仓的核心
1.由于数仓重视数据计算(批处理),和外界外部系统查询或者交互的效率就很低,如果直接开放,大量的查询落进来,全部转化成批处理,频繁查询会给数仓带来压力,业务那边也会出现因为数据查询结果不及时的问题,所以会有一层ADS层来存储数据,ADS层会采用一些产品为外部系统提供访问接口,提供更快的查询跟交互速度
2.举例:
要满足报表的快递查询放在Kylin(报表决策),要满足前段业务的并发查询的Hbase,满足前段的智能检索,放Elasticsearch,因此ADS会有多个产品组成完成业务的不同功能,成本低的也可以直接放mysql等一些数据库中查询