数据仓库-ETL
ETL这个过程可以说下整套数据流程下来最枯燥也是最耗时间的流程,但是也是最重要的。很多时候我们不缺数据,缺的是好数据,而ETL的结果则导致下游成员的数据质量。
ETL是贯穿数仓的整个环节,不是说只是在某一个地方才使用的。ETL工作的实质就是从各个数据源提取数据,对数据进行转换,并最终加载填充数据到数据仓库维度建模后的表中。只有当这些维度/事实表被填充好,ETL工作才算完成
简单介绍下ETL的几种相关工具:
数据抽取工具:Kafka , Flume
数据清洗:Hive , tez , spark , storm
其它工具
数据存储:hadoop、hbase,ES、redis
任务管理:azkaban、oozie
数据同步:datax、sqoop
1.什么是ETL
ETL:抽取、转换、加载
1. 抽取(Extract)
数据仓库是面向分析的,而操作型数据库是面向应用的。但是不是所有用于支撑业务系统的数据都有拿来分析的必要。因此,该阶段主要是确定需要从应用数据库中提取的数。
具体开发过程中,开发人员可能会发现某些ETL步骤和数据仓库建模后的表描述不符。这时候就要重新核对、设计需求,重新进行ETL。
数据抽取是指把ODS源数据(用户访问日志,操作日志,业务日志,监控日志...等各种日志)抽取到DW中,然后处理成展示给相关人员查看的数据
抽取频次:
通常如果可以的话,能增量就增量抽取,不能再考虑全量。例如订单的话一般需要全量抽取(由于量级比较小,而且订单状态会变化)
如果没有特殊要求可以一天一次,但是需要避开拉去日志的高峰期
对于有实时性要求的日志,可以一小时一次,或者直接使用kafka等相关工具收集,需要考虑到系统能否承受
2. 转换(Transform)
转换步骤主要是指对提取好了的数据的结构进行转换,以满足目标数据仓库模型的过程。此外,转换过程也负责数据质量工作,这部分也被称为数据清洗。
通常做法:空值处理,验证数据正确性;主要是把不符合?业务含义的数据做一处理,规范数据格式(比如把所有的日期都格式化成yyyy-MM-dd HH:mm:ss),
数据标准统一(比如男女,不能用01.02表示)
3. 加载(Load)
加载过程将已经提取好了,转换后保证了数据质量的数据加载到目标数据仓库。加载可分为两种L:首次加载和刷新加载。其中,首次加载会涉及到大量数据,而刷新加载则属于一种小批量的加载。数据拉取,清洗完之后,就需要展示了。一般是把清洗好的数据加载到mysql中,然后在各系统中使用,或者使用Tableau,FinBI等第三方服务直接给相关人员展示