ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽(extract)、转换(transform)、加载(load)至目的端的过程,是数据仓库的生命线。它是一种数据处理过程,用于从不同的数据源中提取数据、对数据进行转换和清洗,并将处理后的数据加载到目标系统或数据仓库中。
ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。 通常情况下,在BI项目中ETL会花掉整个项目至少1/3的时间,ETL设计的好坏直接关接到BI项目的成败。
ETL的设计分三部分:数据抽取、数据的清洗转换、数据的加载。在设计ETL的时候我们也是从这三部分出发。数据的抽取是从各个不同的数据源抽取到ODS(Operational Data Store,操作型数据存储)中——这个过程也可以做一些数据的清洗和转换),在抽取的过程中需要挑选不同的抽取方法,尽可能的提高ETL的运行效率。ETL三个部分中,花费时间最长的是“T”(Transform,清洗、转换)的部分,一般情况下这部分工作量是整个ETL的2/3。数据的加载一般在数据清洗完了之后直接写入DW(Data Warehousing,数仓 )中去。
ETL 逻辑架构需要跟数据架构放在一起看:
抽取层:ETL 需要先将源端的数据抽取到数据仓库 ODS 层保持源结构。
集成转换层:基于 ODS 层做集成转换写入数仓明细层或维度层。集成主要是值编码映射、消除冗余、不一致和错误。转换主要是将集成后的数据做进一步处理,以便将数据存储到统一设计的数仓明细层。
特殊业务处理:数据明细层主要为了统一规范化的存储全域数据,但为了更好的支撑下游的各种数据应用,还需要对数据做进一步的加工汇总转换。
Extraction
抽取数据的来源:
通常OLTP系统采⽤关系数据库存储业务操作数据,从关系数据库抽取操作型数据是最多⼀种数据抽取. 业务系统数据库:可以使用datax或者sqoop等ETL工具进行数据抽取,每天定时抽取一次。
OLTP系统通过⽇志系统将⽤⼾的操作⽇志、系统⽇志等存储在OLTP服务器上.埋点日志数据:一般会采用flume来进行日志数据的抽取,也可以将日志数据保存到文件中,定时加载即可。
OLTP系统提供对外输出数据的接⼝(⽐如telnet),采集系统与该接⼝对接,从数据流接⼝抽取需要的数据。
其他的数据:第三方数据,网络爬虫数据等等
抽取加载策略:
ETL 策略可以分为两类,抽取策略和加载策略。抽取策略我们需要考虑对源端系统的影响以及抽取行为的开销。加载策略我们更多的是考虑对目标端已有数据的影响、数据完整性、重复执行也要保证幂等性。
抽取策略:
主要考虑:如何减少对业务系统的影响。
常见的抽取策略主要分为3种:
1.抽取方式:
全量抽取:最简单的一种抽取方式,但是最消耗资源的方式,将原表种的数据全部查询过来。
使用场景:1.一般数据量比较小的表可以进行全量抽取,例如:商品表等等。
2.在系统种一般不发生变化的一些表,例如:地区表等等
增量抽取:抽取的时候会抽取到新增和修改的数据。
使用场景:如果表的数据量比较大,并且新增比较频繁或者经常会发生变化。例如:订单表
新增抽取:每次只抽取新增的数据
使用场景:流水性质的一些表建议使用新增,因为这一类表数据量比较大,并且表种的数据只会新增。例如:流水表 日志表 等等
注意:在进行增量和新增抽取的时候一般都使用日期来进行过滤
2.抽取周期:按小时、按天、按周、按月。抽取周期的选择,主要取决于业务对实时性的要求。周期越短实时性越高但成本也会越高。对于部分实时性要求高的需求每30分钟抽取到 ODS 层然后直接从 ODS 层支撑业务也是一个选择。
3.抽取时机:这个需要根据抽取周期来定,如果按日抽取的话,我们通常选择在凌晨业务不繁忙的时候进行,同时不建议刚过0点就开始,避免部分数据延迟到达。
加载策略:
主要考虑的因素:考虑是否对目标表中的现有数据造成影响,例如:保证数据的完整性,重复执行之后要保证状态是一致的。
加载策略主要由4种:
直接追加:将抽取过来的数据直接增加到目标表中。
使用场景:对于抽取方式为新增抽取的可以使用直接追加。
使用语句:insert into ......
直接覆盖:将目标表中的数据全部删除,然后在将抽取过来的数据添加。
使用场景:抽取方式为全量,并且不要求记录数据的历史信息,则可以使用直接覆盖。
使用语句:truncate 来清除数据 insert into加载数据
注意: ODS 层不能使用这种加载策略需要每天新建一个分区,且该任务不可重复执行(在流程控制和运维时候需要特别注意)。
更新追加:将抽取过来的数据和目标表中的数据进行对比,如果已经存在的则需要修改,否则需要进行新增。
使用场景:抽取方式如果是增量抽取,并且不需要保留历史数据,则可以使用更新追加。