1,ETL
ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。它的主要作用是将企业中分散、非完全结构化、标准不统一的各种数据,整合到一起,形成企业级统一数据仓库,为企业的分析决策提供有质量保证的数据源。
2,ETL过程
主要包含三大阶段,分别是数据抽取、数据转换、数据加载。
3,ETL流程--数据抽取
3.1 关系型数据库
关系型数据库数据高度结构化、数据量不算特别大、数据更新相对频繁、数据质量较高、数据获取比较方便,分为离线与实时
离线抽取,应用场景是对短时间内的更新不敏感,只关心一段时间后的最终状态,一般是固定周期定时抽取。抽取方法,可以采用快照的方式,对整个表做全表快照;或者是采用基于时间字段的增量抽取,但是需要对这个字段的更新场景非常了解。
实时抽取,通常的应用场景是对数据的最新状态非常敏感,当有新数据插入或者旧数据更新时,需要及时抽取。抽取方法有很多,其中常用的一种是基于消费数据库binlog的方式,如阿里开源的canal。
3.2 服务端程序日志文件
各种日志数据混杂在一起(需要过滤出自己需要的)、数据格式比较多样(格式可能不统一)、数据量相对较大。对于这类数据,通常的方法就是过滤抽取。抽取方法,可以使用flume监控文件目录,或者使用FileBeat实时监控文件内容变化。
3.3 客户端用户行为数据
数据量非常大、数据源非常分散、数据质量参差不齐、数据结构化程度高。针对这种数据,通常的抽取方法,就是专门设计一个数据收集系统来处理收集数据的问题。
4,ETL流程--数据转换
ETL的核心环节,也是最复杂的环节。它的主要目标是将抽取到的各种数据,进行数据的清洗、格式的转换、缺失值填补、剔除重复等操作,最终得到一份格式统一、高度结构化、数据质量高、兼容性好的数据,为后续的分析决策提供可靠的数据支持。
4.1 ETL流程--数据清洗
清洗掉脏数据,以免混入正常数据中,造成数据质量下降,引导有偏差的错误决策。通常的做法有,md5校验、关键字段检查、格式类型一致性检查、无效性检查等。
(1)md5校验通常用于通过公网传输的数据,为防止数据被篡改,需要比对md5值来保证数据的安全性,没能通过md5检验比对的数据将被视为脏数据过滤掉。
(2)关键字段检查,是指在一条数据记录中,非常关键的字段,如果其值不合法,或者类型不对,将被视为非法数据。比如,识别用户行为的字段,其值不在规定取值范围内时,将无法识别具体是做了什么操作,将被视为非法数据清洗掉。
(3)格式类型一致性检查,就是检查一条数据记录的整体格式或者重要字段的类型是否符合规范,如果不符合,同样也是没办法处理,只能作为脏数据处理掉。例如,不合法的日期格式。
(4)无效性检查,通常是比较严格的过滤方法,它主要目的是为了保证数据的高可靠性,通常是事先规定好数据的可信范围,不满足的将被视为不可信的无效数据。
4.2 格式转换
对数据格式做统一化规范化处理,方便后续的分析作业能够更好地使用数据。一般根据源数据格式和目标格式的不同,会有不同的实现。一般包含记录格式转换和字段格式转换。记录格式转换,就是最终将一条记录转换成什么格式,例如转成json格式或csv格式。字段格式转换是对字段值进行格式的统一化处理,如将长整型时间戳全部转化为人类可读的日期格式。
4.3 错误数据处理
这一类错误产生的原因是业务系统不够健全,在接收输入后没有进行判断直接写入后台数据库造成的,比如数值数据输成全角数字字符、字符串数据后面有一个回车操作、日期格式不正确、日期越界等。这一类数据也要分类,对于类似于全角字符、数据前后有不可见字符的问题,只能通过写SQL语句的方式找出来,然后要求客户在业务系统修正之后抽取。日期格式不正确的或者是日期越界的这一类错误会导致ETL运行失败,这一类错误需要去业务系统数据库用SQL的方式挑出来,交给业务主管部门要求限期修正,修正之后再抽取。
4.4 缺失值填补
针对数据中缺失的空位进行填充,以保证数据类型的一致性或完整性。例如,对于一个数量类的整数型字段,当其值缺失时,可以考虑填充0。这里要注意的是缺失值填充要相对谨慎一些才行,因为这个过程相当于是在修改原始数据,一定要确保填充的值对后续的分析不会造成误导性的影响。
4.5 剔除重复数据
防止数据重复上传,造成误判。剔除重复数据,是非常有必要的,也是保证数据质量的前提。
数据清洗是一个反复的过程,不可能在几天内完成,只有不断的发现问题,解决问题。对于是否过滤,是否修正一般要求客户确认,对于过滤掉的数据,写入Excel文件或者将过滤数据写入数据表,在ETL开发的初期可以每天向业务单位发送过滤数据的邮件,促使他们尽快地修正错误,同时也可以做为将来验证数据的依据。数据清洗需要注意的是不要将有用的数据过滤掉,对于每个过滤规则认真进行验证,并要用户确认。
4.6 增加必要信息
对数据增加一些追踪信息或者是生成一些必要的标识字段。有些字段是和具体的业务强相关的,也有一些通用的字段。比如,源数据里只有长整型时间戳字段,可以增加可读性比较高的日期时间字段,还可以增加数据来源字段便于追踪数据血缘关系。
5,ETL流程--.数据加载
把数据加载至目的地,比如数据仓库中。通常的做法是,将处理好的数据写成特定格式(如parquet、csv等)的文件,然后再把文件挂载到指定的表分区上。也有些表的数据量很小,不会采用分区表,而是直接生成最终的数据表。
6,ETL--日志处理
(1)执行过程日志,这一部分日志是在ETL执行过程中每执行一步的记录,记录每次运行每一步骤的起始时间,影响了多少行数据,流水账形式。
(2)错误日志,当某个模块出错的时候写错误日志,记录每次出错的时间、出错的模块以及出错的信息等。
(3)总体日志,只记录ETL开始时间、结束时间是否成功信息。如果使用ETL工具,ETL工具会自动产生一些日志,这一类日志也可以作为ETL日志的一部分。