你已在转换阶段抽取、清理并整理好数据,使其成为理想的格式。现在,是时候将这些处理过的数据迁移到最终目的地了。最直接的方法之一就是采用完整加载策略。
想象你有一块白板(你的目标表)和一系列笔记(你的转换数据)。完整加载就像完全擦除整个白板,然后将你所有的现有笔记都写上去。每次运行该过程时,你都会清空所有内容,并根据最新的转换数据重写一切。
完整加载的工作原理
完整加载(Lfull)是一种数据加载策略,用于将全部数据从源系统迁移到目标系统。此过程通常包含一些特定步骤。
- 准备: ETL 过程完成抽取和转换步骤,生成可供加载的数据集。
- 目标准备(可选但常见): 目标表中现有数据通常会被完全移除。这在 SQL 数据库中常用
TRUNCATE TABLE 命令完成,它通常比逐行删除(DELETE FROM table)更快。有时,表甚至可能被删除并重建,特别是当涉及模式变更时。
- 数据加载: 整个转换后的数据集被插入到当前为空的目标表。
该过程确保在加载操作完成后,目标表包含转换阶段为该次特定运行生成的数据集的准确副本。
一张描绘完整加载过程的图表。数据被抽取并转换。目标表在加载转换后的数据之前被清空,完全替换掉之前的内容。
何时使用完整加载
尽管简单,完整加载并非总是最佳选择,特别是对于非常大的数据集。然而,它通常适用于以下几种情况:
- 首次数据加载: 首次填充数据仓库或目标表时,完整加载是一种自然的方法。
- 小型数据集: 如果数据量相对较小,擦除并重新加载所有内容可能比弄清变更内容更快、更简单。“小”是相对的,取决于你的系统性能和可接受的加载时间窗口。
- 非重要历史数据: 如果目标系统不需要保留历史状态(例如,它只需要当前状态),完整加载会大大简化流程。
- 缺乏变更追踪: 当源系统未提供可靠方法来识别自上次抽取以来哪些数据已变更时(例如时间戳或版本号),完整加载可能是确保目标反映当前源状态的唯一可行方式。
- 开发和测试: 完整加载常用于开发或测试环境,因为它们易于重置并确保已知状态。
- 维度表: 有时,数据仓库中较小的维度表(描述产品、客户或时间等业务实体的数据表)会被完整重新加载,因为它们不会变得过大,并且倾向于采用简单性。
完整加载的优点
- 简单性: 逻辑直观明了。你不需要复杂的机制来追踪变更、处理更新或管理删除。擦除并替换即可。
- 保证一致性(加载后): 成功完整加载后,目标表在那个时间点完美映射源数据(经过转换阶段处理的)。
- 更简单的错误恢复: 如果完整加载中途失败,你通常只需再次清空目标并重启加载过程,而无需担心部分更新问题。
完整加载的缺点
- 大型数据低效率: 每次重新加载数百万或数十亿行会消耗大量时间、网络带宽和计算资源。加载时间可能变得过长,无法接受。
- 历史数据丢失: 由于你擦除目标数据,因此会丢失该特定表内的任何历史记录,除非你预先设计系统来归档数据。
- 潜在停机/锁定: 清空和加载大量数据可能会锁定目标表,使其在加载过程中无法被其他应用程序读写。
- 资源密集: 源系统和目标系统在完整加载操作期间都会承受重负载。
完整加载策略提供了一种基本方法来填充目标系统。它的简单性使其具有吸引力,特别是对于小型数据集或初始加载。然而,它在处理大型数据量时的局限性常常促使数据工程师考虑其他方法,例如增量加载,我们将在后面讨论。