ETL开发
概述
ETL是数据仓库的后台,主要包含抽取、清洗、规范化、提交四个步骤,传统数据仓库通常分为四层模型。web

分层的做用:数据库
1.划分ETL阶段工做重心,便于管理微信
2.下降开发和维护成本app
3.减小需求变化带来的冲击编辑器
4.便于数据问题跟踪工具
名词解释:大数据
-
ODS——操做性数据 -
DW——数据仓库 -
DM——数据集市
STG层
在维度建模阶段已经肯定了源系统,并且对源系统进行了数据评估。STG层是根据CDC策略把各个源系统的数据抽取到数据仓库中。STG层主要是面向批处理的形式,若是是根据日志信息实时同步,能够跳过STG层直接进入ODS层。flex
STG做用: 减轻源系统压力;数据备份,支持重跑;便于问题跟踪;数据质量检查,主要起到缓冲的做用。优化
开发步骤:编码
-
肯定CDC策略,根据源系统的数据情况选择一个合适的CDC策略。 -
设计Mapping文档。 -
设计物理模型,STG的物理模型通常包括源系统的全部字段和审计字段,例如:源系统名称,源表名称,加载时间,加载方式。能够去掉其余约束条件,好比主键、索引,默认值。若是源表和目标表的数据库类型不一样,最好字段长度要进行扩充,通常目标表的数据类型就选择几种经常使用,长度就选择几个固定的长度。 -
抽取数据,STG层面向异构数据源,最好选择用ETL工具,通常ETL工具都支持多种数据源。STG层不作数据转换。 -
加载数据,STG层通常保留7天或一月的数据
ODS层
ODS层是把STG层数据进行历史存档,保留源系统的全部历史数据,若是是流式的,能够跳过STG层,实时同步到ODS层。
ODS做用: 全量存储源系统的数据;支持下游系统实时查询业务;数据质量检查
开发步骤:
-
设计Mapping文档。 -
设计物理模型,ODS的物理模型通常包括源系统的全部字段和审计字段,可是和源系统最主要的区别是ODS层加了逻辑删除标记和增量时间戳。由于不少源系统均可能进行物理删除数据,即便有逻辑删除标记,可是也能够在后台人工删除数据。 -
抽取数据,ODS层从STG层抽取数据,在同一个数据平台上,能够采用ETL工具,也能够手工编码。 -
加载数据,进行数据比较,判断是否有物理删除状况,若是有打上删除标记。ODS层保留全量数据。
DW层
DW层是清洗、规范化,提交一致化维度和事实的工做区,创建反规范化的维度模型。
数据清洗:数据清洗是发现数据质量问题并纠正数据的过程,通用的方法是戴明质量环
主要步骤:
-
定义数据质量需求,根据业务需求和数据剖析结果肯定数据质量需求的优先级。 -
制定数据质量测量类型 -
提交数据质量测量结果表,一般异常数据处理策略有:中断处理;把拒绝记录放在错误时间表里;只作标记,数据继续处理 -
纠正数据分为四个优先级:必须在ETL处理;最好在ETL处理;最好在源头处理;必须在源头处理
数据规范化:
因为数据仓库的数据来源各个业务系统,每一个业务系统相对都是封闭的,他们在命名、取值上都有本身的特色。规范化就是通过标准化、去重、合并、拆分、整合等过程把各个业务系统的数据统一命名,统一取值,创建企业标准版本数据。
主要步骤:
1.数据标准化
从数据的内容、格式、命名、计算规则等输出为惟一的版本数据,把各个源系统的相同描述对象可是不一样取值进行统一,好比:性别字段,有的源系统用0和1或Man和Wonen。经过映射表统一命名为M和F。
2.删除重复数据
若是源系统中存在重复数据或者多个源系统维护了相同对象的数据,这时候就要根据保留规则,删除重复数据,只保留惟一的一条数据。
3.数据共存
把各个业务系统的数据通过拆分、合并、整合。例如相同的客户号,二个源系统都维护了这个客户的联系方式,这时候就要根据业务规则来选择保留哪那个源系统的值。
维度表的提交:
-
1.确认粒度
维度表的粒度就是表的业务主键,根据业务主键来判断记录的惟一性。
-
2.选择代理键生成器
ETL工具和数据库都有设置字段自增加的功能。
-
3.选择维度表类型
根据业务系统的实际状况选择合适的维度表类型,通常采用缓慢变化维类型1和类型2。
-
4.增量加载维度数据
维度表的每一个字段都要设置默认值,不能为空。首次加载的时候要有一条代理键为-1的默认记录,为了防止事实表查找不到代理键。
-
5.生成代理键管道
为了生成事实表的维度代理键,通常会建一个查找维表,查找维表包含业务主键和代理键的映射关系。
事实表的提交:
-
1.选择事实表类型
根据业务需求选择合适的事实表类型,通常会先建最细粒度的事务事实表,根据事务事实表建周期快照或累积事实表。
-
2.用代理键替换主键
根据事实表中维表的业务主键关联查找维表替换成代理键,若是关联不上设置为-1。
-
3.增量加载事实数据
事实表的每一个字段不能为空,事实表主要包含事实粒度的业务主键、维表业务主键、维表代理键、源表的主键、逻辑删除标识和事实。便于从新加载事实表和问题跟踪。因为事实表的数据量大,通常采用分区的方式进行存储。
-
4.提交错误事实表
把加载事实表的拒绝记录存储在错误事实表中,以便进行数据质量跟踪。
-
5.事实表合并
一级事实表都是根据单个业务过程创建的,为了便于分析和重用,须要把多个业务过程的事实表进行合并,造成二级事实表。
-
6.事实表归档
随着时间的推移,事实表中会存放大量的历史数据,若是这些数据不多再出如今统计分析中,须要把这些数据迁移到其余表中或以文件格式存储。
DM层
DM层根据业务需求把DW层数据进行聚合或生成宽表。
建立聚合事实表
前台展示的数据通常都是聚合后的数据,聚合后的数据量比最细粒度的事实表小不少,查询性也有很大的提高。
建立聚合表的方法
-
1.增量加载,建立聚合表,增量加载聚合表。
-
2.聚合导航,用户经过报表分析工具,根据用户请求把基础事实表自动生成聚合数据。
-
3.物化视图,建立物化视图定时刷新聚合表。
建立缩小维度表
因为聚合事实表的粒度和基础事实表粒度不一样,须要建立和聚合表相同粒度的维度表,这些维度表只是基础维度表的缩小版。
ETL优化
1.减小磁盘I/O
-
关联查询的时候,尽量把无效的数据过滤掉 -
只查出须要的列 -
大数据量尽可能不要有排序 -
在加载数据时关闭日志
2.分区和并行
-
大数据量能够进行分区 -
查询和任务调度均可以进行并行处理
3.增量加载
4.增长索引
5.大而化小,复杂的查询能够分红多个子任务来执行。
6.重用结果集,把多个查询任务的共用数据能够单独建临时表。

扫描下方二维码
加入优质社群一块儿交流吧!
如若二维码过时
请添加小编微信,回复关键词:[进群/加群],
-今日互动-
ETL规范你知道了吗?欢迎文章下方留言互动
若是对你有帮助的话
❤️来个「转发朋友圈」和「在看」,是最大的支持❤️
本文分享自微信公众号 - DataScience(DataScienceTeam)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。