理解 ETL:数据处理的基石
ETL,即提取(Extract)、转换(Transform)和加载(Load),是数据处理中的核心概念。ETL 工具负责从各种数据源获取数据,然后将其转化为符合目标系统或数据模型要求的中间形式。最后,这些工具会将转换后的数据加载到目标数据库、数据仓库甚至数据湖中。
大约在十五到二十年前,”ETL” 这个词还鲜为人知。那时,许多定制的批处理任务主要在本地硬件上运行。
实际上,许多项目都在使用某种形式的 ETL,即使当时他们没有明确地称之为 ETL。那时,当我解释涉及 ETL 过程的设计,并用这种方式描述它们时,这几乎被看作一种来自另一个世界的技术,非常少见。
然而,如今情况大不相同。迁移到云端已成为首要任务。 ETL 工具在大多数项目架构中扮演着至关重要的战略角色。
本质上,上云意味着将本地数据作为源头,并将其转换为与云架构兼容的格式,然后存储到云数据库中。这正是 ETL 工具的主要职责。
ETL 的历史及其与现在的关联
资料来源:aws.amazon.com
ETL 的核心功能始终如一。
ETL 工具从各种来源,如数据库、纯文本文件、Web 服务,以及最近的云端应用程序中提取数据。
传统上,这通常意味着从 Unix 文件系统中读取文件,并进行预处理、处理和后处理。
您可能会看到类似以下的文件夹结构:
- 输入
- 输出
- 错误
- 归档
这些文件夹下通常还会有按日期组织的子文件夹。
这是一种处理传入数据并准备将其加载到数据库的标准方法。
而现在,Unix 文件系统不再是唯一的数据源,甚至可能没有文件。 现在,API(应用程序编程接口)越来越常见。虽然仍可使用文件作为输入格式,但并非必需。数据可以存储在高速缓存中。无论数据形式如何,都需要遵循某种结构化格式,通常是 JSON 或 XML 格式。在某些情况下,旧的 CSV(逗号分隔值)格式也仍然适用。
您可以自定义定义输入格式。是否需要记录输入文件的历史取决于您的具体需求,这不再是标准步骤。
数据转换
ETL 工具将提取的数据转换为适合分析的格式,包括数据清理、数据验证、数据增强和数据聚合。
在过去,数据会经历一些复杂的自定义逻辑,如 Pro-C 或 PL/SQL 过程的数据暂存、转换和目标模式存储。这是一个类似的标准流程,就像将传入的文件按处理阶段分成子文件夹一样。
为什么看似理所当然,却可能存在根本错误?通过直接转换传入的数据,而没有永久存储,您会失去原始数据最重要的优势,即不变性。项目直接丢弃数据,没有重新构建的机会。
现在,您应该尽量减少对原始数据进行的转换,特别是对于首次进入系统的数据。当然,后续步骤可能包括重要的数据修改和数据模型转换。但是,您应尽可能以不变且原子化的形式存储原始数据。这与以往本地部署时代的做法相比,是一个重大转变。
数据加载
ETL 工具将转换后的数据加载到目标数据库或数据仓库中,包括创建表、定义关系并将数据加载到相应的字段中。
加载步骤可能是唯一一个多年来保持不变的步骤。唯一的区别是目标数据库。以前主要是 Oracle,而现在可以是 AWS 云中提供的任何服务。
当今云环境中的 ETL
如果您的计划是将数据从本地迁移到 AWS 云,那么您需要一个 ETL 工具。它是必不可少的,因此云架构的这一部分可能成为至关重要的一环。如果这一步出错,后续环节也会受到影响。
虽然市场上有很多选择,但我将重点介绍我个人经验最丰富的三个工具:
- 数据迁移服务 (DMS) – AWS 的原生服务。
- Informatica ETL – 可能是 ETL 领域的主要商业参与者,成功地将其业务从本地部署转移到云端。
- Matillion for AWS – 云环境中一个相对较新的参与者。它不是 AWS 原生的,而是云原生的。它没有 Informatica 那样的历史。
AWS DMS 作为 ETL
资料来源:aws.amazon.com
AWS 数据迁移服务 (DMS) 是一种完全托管的服务,可用于将数据从不同的来源迁移到 AWS。它支持多种迁移场景。
- 同构迁移(例如,Oracle 到 Amazon RDS for Oracle)。
- 异构迁移(例如,Oracle 到 Amazon Aurora)。
DMS 可以将数据从各种来源(包括数据库、数据仓库和 SaaS 应用程序)迁移到各种目标,例如 Amazon S3、Amazon Redshift 和 Amazon RDS。
AWS 将 DMS 服务视为将数据从任何数据库源导入云原生目标的终极工具。虽然 DMS 的主要目标只是将数据复制到云端,但它也具备数据转换能力。
您可以使用 JSON 格式定义 DMS 任务,以便在将数据从源复制到目标时自动执行各种转换操作:
- 将多个源表或列合并为一个值。
- 将源值拆分为多个目标字段。
- 使用另一个目标值替换源数据。
- 根据输入上下文删除任何不需要的数据或创建全新的数据。
这意味着,是的,您绝对可以将 DMS 用作项目的 ETL 工具。虽然它可能不如其他选项那样复杂,但如果您提前明确定义了目标,它可以完成工作。
适用性因素
尽管 DMS 提供了一些 ETL 功能,但它主要用于数据迁移。在某些情况下,使用 DMS 可能比使用 Informatica 或 Matillion 等 ETL 工具更合适:
Matillion ETL
资料来源:matillion.com
Matillion 是一个云原生解决方案,可用于集成来自各种来源的数据,包括数据库、SaaS 应用程序和文件系统。它提供了一个可视化的界面来构建 ETL 管道,并支持各种 AWS 服务,如 Amazon S3、Amazon Redshift 和 Amazon RDS。
Matillion 易于使用,对于初次接触 ETL 工具或数据集成需求不太复杂的组织来说,这是一个不错的选择。
另一方面,Matillion 有点像白板。它具有一些预定义的功能,但您必须进行自定义编码才能实现。您不能期望 Matillion 可以直接为您完成任务,即使该功能是默认提供的。
Matillion 也经常将自己描述为 ELT 而不是 ETL 工具。这意味着 Matillion 更倾向于先加载数据,然后再进行转换。
适用性因素
换句话说,Matillion 更擅长转换已存储在数据库中的数据。主要原因是必须进行自定义脚本编码。由于必须先对所有特殊功能进行编码,因此最终效果很大程度上取决于自定义代码的质量。
自然地,人们会期望在目标数据库系统中更好地处理这些任务,而在 Matillion 上只保留一个简单的 1:1 加载任务。这样可以最大程度地减少因自定义代码而破坏数据的可能性。
虽然 Matillion 提供了一系列数据集成功能,但它可能不具备与其他一些 ETL 工具相同级别的数据质量和治理功能。
Matillion 可以根据组织的需要进行扩展或缩小,但可能无法高效地处理大量数据。并行处理能力有限。在这方面,Informatica 无疑是更好的选择,因为它更先进且功能更丰富。
然而,对于许多组织来说,Matillion for AWS 提供的可扩展性和并行处理能力可能足以满足他们的需求。
Informatica ETL
资料来源:informatica.com
Informatica for AWS 是一种基于云的 ETL 工具,旨在帮助集成和管理 AWS 中各种来源和目标的数据。它是一种完全托管的服务,为数据集成提供了一系列特性和功能,包括数据剖析、数据质量和数据治理。
Informatica for AWS 的一些主要特性包括:
适用性因素
显然,Informatica 是列表中功能最丰富的 ETL 工具。但是,它可能比 AWS 中可用的其他一些 ETL 工具更昂贵且使用起来更复杂。
Informatica 的成本可能很高,特别是对于中小型组织。其定价模式基于使用情况,这意味着组织可能需要随着使用量的增加而支付更多费用。
它的设置和配置也可能很复杂,特别是对于刚接触 ETL 工具的人来说。这可能需要投入大量的时间和资源。
这也导致了我们所说的“复杂的学习曲线”。对于那些需要快速集成数据或用于培训和入职的资源有限的人来说,这可能是一个缺点。
此外,Informatica 可能无法有效地集成来自非 AWS 来源的数据。在这方面,DMS 或 Matillion 可能是更好的选择。
最后,Informatica 是一个非常封闭的系统。 对其进行自定义的能力有限,需要接受其预设的配置,这在一定程度上限制了解决方案的灵活性。
最后的话
正如许多其他情况一样,没有一种适用于所有情况的解决方案,即使是 AWS 中的 ETL 工具也是如此。
您可能会选择最复杂、功能最丰富且成本最高的 Informatica 解决方案。但这在以下情况下才有意义:
- 项目相当大,而且您确信整个未来的解决方案和数据源也会连接到 Informatica。
- 您可以负担得起技术娴熟的 Informatica 开发人员和配置人员团队。
- 您需要强大的支持团队,并且愿意为此付出代价。
如果以上条件不满足,您可以尝试 Matillion:
- 如果项目的需求通常不那么复杂。
- 如果需要在处理过程中包含一些非常自定义的步骤,灵活性是一个关键要求。
- 如果您不介意团队从头开始构建大部分功能。
对于任何更简单的任务,显而易见的选择是使用 AWS 的原生服务 DMS,它或许能很好地满足您的需求。
接下来,研究一些数据转换工具,以便更好地管理您的数据。