ETL和ELT的区别

0、前言

当你第一次看到这两个词的时候会以为写错了或者ELT是不是其他高大上的概念,但是实质他们两只是顺序调换。虽然表面看只是顺序调换了,但是两者处理数据的方式也是不一样。

ETL 是Extract(抽取)、Transform(转换)、Load(加载)

ELT 是Extract(抽取)、Load(加载)、Transform(转换)

一、ETL

ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库,但其对象并不限于数据仓库。

ETL是构建数据仓库的重要一环,从业务系统搬数据到ODS(Extract抽取),然后像流水线一样,处理一个环节(Transform转换),再放到一个框里(Load加载),再处理一个环节,再放到一个框里(数仓某一层)。

这就是DWD、DWB、DWS、DM等数仓各层的建设,就这样一层层的先处理数据,再加载到本层数仓,然后下一层再处理数据,再加载到过去。

ETL和ELT的区别

所以,整个数据处理和流转的过程就是 ETL ,也就是先Extract(抽取),再Transform(转换),最后Load(加载)了。

流水线最大的好处是在固定的处理环节前提下,建设效率最快,成本最优,建好之后基本上只需要维护就行了。

ETL 很好用,自动处理所有数据,把数据规规整整的码放在数据仓库里供各方调取。

 ETL 也很简单,基本上都是可视化、低代码的形式,设计好流程就行了。

 ETL 的成本很低,一次性建设,之后就不用重复投入,只需要每天看看跑批任务有没有问题就行了。所以很多人的重点工作都是运维。

二、ELT 

2.1 出现背景

ETL虽然好用,逻辑清晰,但是 ETL 也有非常致命的缺点:流程太长、太笨重、时间太长,改起来成本太高了!!!

ETL 程序通常是把 E 和 L 放在一起做,这就导致单个程序中的逻辑经常非常非常复杂的。 

ETL和ELT的区别

按照以上图的调度程序,维护起来难道不崩溃。

如果业务或者底层数据要动一下, ETL 流程就要随之进行调整。简单的逻辑还好处理,一旦遇到图上的局面,别的不说,光找节点就得找死人。

所以, ETL 开发很简单,但是维护成本奇高无比!复杂度奇高无比!工作难度奇高无比!

业务的频繁变化,再加上 ETL 的时间成本和吞吐量限制(堵塞),所以导致 ETL 这种数据加工的方式不能满足于现在的企业发展需要啊。

2.2 形式

ETL 之所以这么复杂,是因为 Transform (转换)和 Load (加载)两个环节耦合过紧导致的。

ETL和ELT的区别 

 从而我们需要把 Transform (转换)和 Load (加载)拆开,这样处理数据的部分就专心计算就行了,搬运数据的部分就专心搬运。

所以, ETL 工具就变成了搬运组件、计算引擎和调度引擎。

搬运组件专门负责搬运数据,不做任何数据处理的操作;

计算引擎专门负责进行数据处理,其他事情跟我没关系;

调度引擎专门负责做流程编排,其他事情也跟我没关系。

这里需要将ETL和ETL工具区分开,这里的 ETL 特指数据处理流程。

在上面的步骤中,也是可以用 ETL 工具代替的。既然是整个工作流都拆开了,那流程也自然就有变化了。第一步没啥变化,但是之后的事情就不太一样了,整体就变成:

ETL和ELT的区别

需要注意的是:上面这个架构只是示意哈,里面的所有具体的组件都是可以换的。

比如说抽取这个动作,你可以用 ETL 工具,可以用 Kafka,这种神奇的东西最大的好处就是吞吐量极大,任你来多少数据都能吃的下。

ODS 可以是数仓的 ODS,也可以是数据湖,奇葩一些用 Kafka 也没问题,别重复了就行。

加载这个动作也可以用 Kafka 或者啥 ETL 工具都行;

计算引擎你用 Spark 还是 Flink 还是 MR 都随意,反正只要能跑任务就行,最后直接输出到 HBase 也行,扔到 Kafka 或者 Redis 都可以。

你现在再看看对比一下两张图就会发现为啥是 ETL 和 ELT 了。

ETL和ELT的区别

 2.3 作用

最底层的改变是E、T、L彻底的解耦了。解耦之后好处多多,比如突破性能瓶颈、程序简化、组件替换、维护成本降低等等。

不过最重要的还是解耦导致的极致的灵活,可以适应当前复杂多变的市场环境。

因为在复杂多变的环境下, ETL 这种传统的数据处理套路是极度不适应的。

等你慢慢分主题域、抽取实体、建好模型、写各种代码、各种调试,好不容易出一张报表的时候,业务过来跟你说:哥,咱的打法变了,APP 都迭代了 3 轮了,这是新需求。你上哪哭去?

所以现在很多大厂的新业务中,都在弱化建模,强化效率,用的其实就是 ELT 的逻辑。

数据直接入湖,然后写个脚本扔 Spark 里跑,直接拖张宽表扔库里,然后怼到一个报表展示工具完事了

参考资料:

1.微信公众号(谈数据)- 《ETL和ELT到底有啥区别》

2.ETL的两种架构(ETL架构和ELT架构) - Jesse_Li - 博客园

上一篇:SparkSQL数据的加载


下一篇:什么是PKL文件