ETL
ETL( Extract-Transform-Load),用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL模式适用于小数据量集。如果在转换过程中需要处理的数据量达到千万上亿或者P级与E级,那么ETL整个流程所需的耗时肯定会很长。
ETL的流程:
- 首先从源端拉取数据,这个过程就是Extract。例如:sqoop,datax等数据同步工具就是Extract抽取数据。
- 当从源端拉取数据后,并没有直接灌入到目标表,可以理解成是先放到一个缓冲区,在这个区域内进行一些符合目标系统标准的预处理,比如我们建设数仓的时候对于数据同步后会把一些空值置为一些默认值,以此来保障数据完整性,对于不同源端的同一种含义的字段信息会进行统一格式转换,对于敏感数据会进行加密等等这些操作,一般是在入仓之前处理掉的。大家也可以当作是在ODS层。
- 当预处理完之后,将数据写入到目标系统中,那么这个时候也就是真正的入仓,也就是说数仓中的数据都是要符合数仓标准的。
ETL转化Transform主要体现:
- 空值处理:可捕获字段空值,进行加载或替换为其他含义数据,并可根据字段空值实现分流加载到不同目标库。
- 规范化数据格式:可实现字段格式约束定义,对于数据源中时间、数值、字符等数据,可自定义加载格式。
- 拆分数据:依据业务需求对字段可进行分解。
- 验证数据正确性:可利用Lookup及拆分功能进行数据验证。
- 数据替换:对于因业务因素,可实现无效数据、缺失数据的替换。
- Lookup:查获丢失数据 Lookup实现子查询,并返回用其他手段获取的缺失字段,保证字段完整性。
- 建立ETL过程的主外键约束:对无依赖性的非法数据,可替换或导出到错误数据文件中,保证主键唯一记录的加载。
ETL架构的优势
- ETL可以分担数据库系统的负载(采用单独的硬件服务器)。
- ETL相对于EL-T架构可以实现更为复杂的数据转化逻辑。
- ETL采用单独的硬件服务器。
- ETL与底层的数据库数据存储无关。
ELT
ELT( Extract-Load-Transform),在ELT架构中,数据的整个加工过程都在目标和源的数据库之间流动,ELT协调相关的数据库系统来执行相关的应用,数据加工过程既可以在源数据库端执行,也可以在目标数据仓库端执行(主要取决于系统的架构设计和数据属性)。当ETL过程需要提高效率,则可以通过对相关数据库进行调优,或者改变执行加工的服务器就可以达到。一般数据库厂商会力推该种架构,像Oracle和Teradata都极力宣传ELT架构。
ELT的流程:
1、源端数据抽取和ETL中的E作用一样,即从源端系统抽取数据。
2、加载流程就和ETL不一样了,T和L进行了位置置换,这里是先加载到目标系统,大家也可以理解成是数据入了数仓。
3、当数据入了仓之后,再进行T操作,也就是进行转换。也就是说数据转换标准化操作由缓冲区转移到了仓中进行。
ELT架构的优势
- ELT主要通过数据库引擎来实现系统的可扩展性(尤其是当数据加工过程在晚上时,可以充分利用数据库引擎的资源)。
- ELT可以保持所有的数据始终在数据库当中,避免数据的加载和导出,从而保证效率,提高系统的可监控性。
- ELT可以根据数据的分布情况进行并行处理优化,并可以利用数据库的固有功能优化磁盘I/O。
- ELT的可扩展性取决于数据库引擎和其硬件服务器的可扩展性。
- 通过对相关数据库进行性能调优,ETL过程获得3到4倍的效率提升一般不是特别困难。
ETL与ELT的区别
在实际场景中这两种模式普遍是共存的。只是针对不同的场景选择不同的模式来解决而已。对于小数据量集而且转换过程不会过于耗时的场景可以采取ETL处理,例如使用sqoop同步数据,日志采集过程当中直接清洗数据这类场景;对于数据体量较大而且转换逻辑比较复杂的场景可以采取ELT处理,例如前面提到的数据加密场景。目前比较火的数据湖和中台的建设多数是以ELT模式开展的。