ETL (extract transformation load)

        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 层不能使用这种加载策略需要每天新建一个分区,且该任务不可重复执行(在流程控制和运维时候需要特别注意)。

更新追加:将抽取过来的数据和目标表中的数据进行对比,如果已经存在的则需要修改,否则需要进行新增。
           使用场景:抽取方式如果是增量抽取,并且不需要保留历史数据,则可以使用更新追加。
                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值