趋近智
每次加载所有数据(全量加载)虽然直接,但效率可能很低,尤其是在处理大型数据集时。设想一下,当每天只有一小部分记录实际发生变化时,却需要复制数百万甚至数十亿条记录。这会消耗大量时间、处理能力和网络带宽,给源系统和目标系统都带来不必要的负担。对于许多应用来说,需要一种更高效的方法:增量加载。
增量加载专注于处理自上次ETL运行以来新增或修改过的数据。您无需替换整个目标表,只需选择性地添加新记录(追加)或更新现有记录。这使得加载过程快得多,资源消耗也少得多。设全量加载处理的数据量为 Dfull,增量加载处理的数据量为 Dincremental。通常对于大型且相对稳定的数据集,Dincremental≪Dfull。
增量加载的基础是准确识别哪些记录需要处理。常见的方法包括:
created_at) 或最后修改时间 (updated_at) 的列。在提取时,您可以只选择时间戳晚于上次成功ETL运行的记录。例如,选择 timestamprecord>timestamplast_load 的记录。对于能够可靠跟踪修改时间的系统来说,这是一种常见且相对简单的方法。needs_sync、is_dirty、status)明确标记已更改或需要处理的记录。ETL过程提取带有特定标志的记录,并在成功处理后可能重置该标志。一旦您识别出新增或变化的数据,就需要将其加载到目标系统中。有两种主要的增量方式:
这是增量加载最简单的形式。您只向目标表添加新记录。目标中现有的记录从不修改。此策略适用于积累历史记录不变的数据,例如:
可以将其比作在日记中添加条目;您添加新页,但通常不会回去重写旧页。
图示显示新记录被添加(追加)到现有目标表中。
通常,源系统中的数据可能发生变化。客户可能会更新他们的地址,或者订单状态可能会改变。在这些情况下,仅仅追加数据是不够的;您需要修改目标系统中的现有记录,并插入新记录。这种组合操作通常称为“Upsert”(更新或插入)。
要执行upsert操作,ETL过程需要:
Upsert常用于数据仓库中加载维度表(例如客户详情、产品信息),其中属性会随时间变化。
图示显示upsert操作如何更新现有记录(ID: 2)并插入新记录(ID: 4)。
虽然高效,但增量加载与全量加载相比引入了一些复杂性:
尽管有这些方面,但性能优势通常使增量加载成为在初始全量加载之后处理大型或频繁更新数据集的首选策略。它最大限度地减少系统负载,并允许更频繁的数据更新,使目标系统保持最新。
这部分内容有帮助吗?
INSERT ... ON CONFLICT语句,这是许多关系数据库中实现增量更新的upsert操作的直接SQL实现。© 2026 ApX Machine Learning用心打造