ETL 是什么:抽取、转换、加载与 ELT 的流程边界
作者:Ai Flowi · 发布于
ETL 是什么?它是一种“抽取、转换、加载”的数据流水线:从源读取记录,转换为约定的数据表示,再将通过检查的结果写入目标。ELT 改变了顺序:先加载抽取的记录,再在目标环境中转换。关键边界在于如何处理验证、拒绝记录和恢复,而不只是哪个工具搬运数据。
三个阶段分别意味着什么
抽取阶段确定哪些源记录属于一个批次,并在不暗中改变其含义的前提下读取。CSV 导出文件、数据库查询或 API 响应都可以提供这个批次。保留源引用和选取规则,让后续操作人员能够解释某条记录为何被纳入。
转换阶段应用目标端契约:字段名、允许的类型、单位、必填值和拒绝规则。带有前导零的标识符,即使只含数字,也应作为文本。把它转换为数值,可能在加载开始前就破坏信息。如果修改会影响审计或纠错,应在修订值旁保留原始值。
加载阶段写入通过检查的记录,并检查目标端实际保留了什么。请求已发送所能提供的证据,弱于写入已确认。如果写入后响应丢失,在检查目标端之前,结果就是未知;立即重复请求可能造成重复记录。
一个附有处理决策的虚构批次
合成教学示例;这些行和计数并非已记录的工作流结果。 假设有一份库存导出文件,其契约要求物品 ID 为文本、数量为非负整数。该批次包含四行。每个源行都有一个独立于物品 ID 的稳定引用。
| 源行 | 原始物品 ID / 数量 | 决策 | 待加载记录 |
|---|---|---|---|
| A | “0017” / “4” | 保留 ID;验证数量并转换其类型。 | “0017” / 4 |
| B | “0021” / “0” | 零符合本例声明的契约。 | “0021” / 0 |
| C | “0032” / “many” | 隔离:数量不是整数表示。 | 无待加载记录。 |
| D | “” / “2” | 隔离:必填 ID 为空。 | 无待加载记录。 |
抽取计数为四;转换决策为两行接受、两行拒绝。如果只有 A 确认写入,加载就尚未完成:一行已接受记录得到确认,另一行仍待处理或结果不确定。不能仅因为转换产生了两条待加载记录,就报告已加载两行。
拒绝记录应保留源引用、原始值和具体原因。纠正 C 会产生一项与 C 关联的新复核决策,不应抹去第一次尝试的证据。详细的数据传输配置可参阅 CSV 导入 Google Sheets。
用同一组记录比较时,ETL 与 ELT 有何区别?
| 边界 | ETL | ELT |
|---|---|---|
| 目标端的初始内容 | 只有经过复核的待加载记录进入目标表。 | 四个原始行进入受控的暂存区。 |
| 转换 | 数量验证在加载目标表之前进行。 | 数量验证针对暂存的原始记录进行。 |
| 被拒绝的记录 | 保留在已接受记录的目标区域之外。 | 保留在暂存区,并附上拒绝决策。 |
| 恢复证据 | 源快照、决策和已确认的写入。 | 暂存批次、转换版本及已发布的目标状态。 |
ELT 并不意味着可以发布未经验证的数据。暂存区需要适当的访问控制,并与用于报告的表明确区分。ETL 可以阻止不合适的记录进入目标,但仍需安全保存被拒绝的记录。两种顺序本身都不能证明支持事务或安全重放。
相关内容:Reverse ETL 是什么:理解运营数据激活与写入边界。
检查点、水位标记与重放
水位标记描述在持续变化的数据源中的处理进度,例如最后一次已复核的更新位置。检查点记录在特定边界上已完成的工作。在确认相应加载之前记录抽取进度,可能导致故障后跳过记录。应将源记录的选取进度与目标端确认分开。
当多条记录具有相同的更新时间时,仅靠时间戳可能无法确定完整边界。应定义稳定的次级排序依据,或采用有重叠范围的读取,并明确处理重复记录。延迟变更需要单独的核对策略;较新的水位标记不能证明旧记录再也不会变化。
重放时,要识别批次及每条源记录。确定重复记录应覆盖、合并、忽略还是复核。追加操作本身不能确立这项策略。如果部分加载失败,应检查目标端已确认的记录,并仅按选定的恢复规则重试。
在构建器中表示库存处理边界
请使用 Load CSV、 JSON Operations 和 Google Sheets 写入参考文档 了解本批次示例的读取、映射及目标端接口。
这条流水线的关键决策是:源行何时具备写入资格。按库存契约,A 和 B 符合要求,C 和 D 则留在拒绝记录台账中。不能把四行全部交给写入组件,再假定目标端格式设置会执行验证。对于这条拟议的库存流水线,Load CSV、JSON Operations 和 Append Rows 已在 组件目录中说明;未经 Ai Flowi 生产测试。组合后的读取、映射与写入配置尚未测试。
示例配置(并非已记录的测试)
- 通过 Load CSV 的
csv_file提供虚构导出文件;选取字段前,先检查其 JSON 行记录。 - 进行经过复核的映射试验时,将 JSON Operations 的
data设为已检查的源 JSON,并选择"JQ Expression"作为operations的值。在query中填写经过复核的验证与行映射表达式;选取待加载记录前,先单独保留被拒绝的记录。 - Append Rows 通过
values接收已批准的数组;选择"RAW"作为value_input_option的值,以在本次拟议写入中保留经过复核的单元格表示。将range_name绑定到库存区域,将spreadsheet_id绑定到其文档,并将google_account绑定到已授权的连接。 - 将批次标记为完成之前,比较已写入的值与已接受行台账。
核对既需要行标识,也需要总数。目标端包含两次 A,虽然有两行,却并未正确加载 A 和 B。比较已接受源引用的集合与已确认目标引用的集合,再按经过复核的待加载记录检查数量。如果无法确认 B 的写入,就让它保持待处理状态。批次总数可能对得上,同时却缺少一个物品、重复另一个物品。
请参阅 CSV 导入表格的设置指南 了解账号与连接的前置条件;在本批次示例中,向构建器提供获准使用的库存导出文件。库存契约使用明确规则,不调用模型;任何提供方费用均不包含在 Flowi 订阅中。
结构漂移与限制
如果源列消失、含义改变或开始混用单位,应在受影响的契约边界停止处理。只有含义仍然明确时,重命名字段才是安全的。保留结构版本,并拒绝无法识别的变更,而不是让空列被当作有效数据通过。
这个批次需要三类独立记录:已接受的记录、拒绝记录台账及目标端写入证据。这些组件目录条目并不能证明具备原生变更数据捕获、原子性的多阶段加载或恰好一次投递。如果任务必须满足这些要求,应使用事务与恢复行为已经验证的系统。可浏览 已有文档说明的用例 了解现有方案的范围。