数据集成的两种常见策略:ETL 和 ELT
数据集成是数据工程师日常最耗时的工作之一。什么是 ETL 呢?ETL 是传统的数据集成领域的一组特定流程,其中有三个重要阶段: Extract(提取), Transform(转换),Load(加载),它包括了数据抽取、转换、加载三个过程。ETL 是进行数据分析和挖掘工作前的准备过程。
先普及一下 ETL 和 ELT 的概念,
ETL 的过程为提取(Extract)→ 转换(Transform)→ 加载(Load), 在数据源抽取后首先进行转换,然后将转换的结果写入目标地(如数据仓库)。
ELT 的过程则是提取(Extract)→ 加载(Load)→ 转换(Transform),在抽取后将结果先写入目标地(数据仓库/数据湖), 然后利用数据仓库的分析能力或者如 Spark 、Presto 等引擎来完成转换操作。
没错,就是 Transform 和 Load 先后次序的问题,但影响非常不一样的,ELT 和 ETL 相比,最大的区别是 "重抽取和加载, 轻转换",从而可以用更轻量、快捷的搭建起一个数据湖/仓平台。使用 ELT 策略,在提取完成之后, 数据加载会立即开始。一方面更快速和高效,另一方面 ELT 允许数据分析人员访问整个原始数据,而不是经过数据工程处理后的 ”二手“ 收据,这为分析师提供了更大的灵活性,使之能更好地支持业务。
具体来说,在过去,由于计算和存储的高成本,ETL 方法曾是必要的。当年典型的 ETL 工具有:
可以说这些软件都曾非常流行。但现在 ETL 正在面临着的问题:
1、不灵活。ETL 本质上是非常僵化的,它不仅需要数据工程师对原始数据按照数据仓库的规范进行层层处理,也迫使数据分析师提前知道要如何分析数据、如何产生报告。
2、不直观。对数据进行的每一次转换(Transform) 都会使一些原始信息 "消失"。数据分析师不能看到数据仓库中的所有数据,通常只能看到数据汇总层及数据集市层的数据,并且 ETL 的处理通常是十分耗时,经过层层的 ETL,时效性也很差。
3、不能自助使用。建立一个 ETL 的 Data Pipeline 通常超出数据分析师的技术能力,需要工程师的参与,这无疑加大了协作的代价。
随着硬件存储成本的急剧下降,在使用数据(L)之前,没有必要进行数据转换(T) 了,传统的 ETL 开始转变为 ELT。这使数据分析师能够以自主的方式完成更好的工作,具体来说,ELT 带来的 2 个明显好处是:
1、支持数据分析师的敏捷决策。原始数据可以被直接 Load 到数据仓库/湖中,这样分析师将始终能够接触到原始数据并根据需要进行转换,这使商业智能过程更加灵活和高效。
2、ELT 大大降低了企业使用数据技术的难度。ELT 方法搭配 Tableau 等商业或者开源的 BI 工具可以直接被非专业技术人员所使用。
走 ELT 路线的开源软件有:Airbyte、Apache SeaTunnel。相信大家对 Airbyte 已经比较熟悉,这里我着重说说 Apache 基金会旗下开源的 SeaTunnel(Incubator) 这个已经在 Apache 孵化器中孵化了快 1 年的数据集成项目。
SeaTunnel Connector use plug-in mechanism, it’s very easy to extend new connector, 当前 SeaTunnel 支持 80+ 种 Source、Sink(Target) Connector, 并且在快速发展中。
SeaTunnel 的运行时流程如上图,用户配置作业信息并选择执行引擎提交作业,Source Connector 负责并行数据数据并将数据发送给下游 Transform 或直接发送给 Sink,由 Sink 将数据写入目的地。值得注意的是,Source 和 Transform 和 Sink 都是可以由您自己轻松开发扩展的。除了使用 SeaTunnel 自己的引擎外,您也可以选择使用 Flink 或 Spark 引擎,这种情况下 SeaTunnel 会将 Connector 包装成 Flink 或 Spark 的程序,并提交到 Flink 或 Spark 集群中运行。