---
order: 1
---
# 增量数据提取

增量提取是指提取数据时只提取新增和修改的数据到目标表中，而不对目标表中存量未发生变化的数据进行处理。相对**全量覆盖**提取而言，因新增和修改的数据一般较少，所以增量提取往往具备更好的提取性能。

加工模型支持以下三种方式的增量提取：

\[\[toc]]

## 清空旧数据并插入新数据{#overwriteinc}

清空旧数据并插入新数据指的是根据设置的**清空范围**先删除目标表中的旧数据，再将当前加工结果数据全部插入。清空旧数据并插入新数据常用于能按照固定时间周期去增量更新目标表数据的场景，如日报表、月报表、年报表的数据提取。

示例说明：按月增量提取销售月报表

具体操作步骤如下：

1. 将加工数据过滤为当月的数据\
   ![过滤为当月的数据](./images/2020-03-13-13-40-50.png)

2. 设置提取方式为清空旧数据并插入新数据，并设置清空范围为清空当月数据\
   ![设置提取方式](./images/2020-03-13-13-42-23.png)

执行提取时，先按照清空范围删除销售月报表（xsybb）的当月数据，再将当前加工结果数据全部插入（当前加工在步骤1中已过滤为当月数据）。

::: tip 提示
清空旧数据并插入新数据提取方式中插入的新数据指的是模型输出前序节点输出的数据，如果你想只插入增量数据，则需要在模型输出之前先过滤出增量数据。考虑到数据提取的性能，建议尽可能早的进行增量数据过滤，尤其是在跨源提取时，跨源数据会先落地到目标数据源的临时表中，如果只落地增量部分数据，则会极大提升提取性能，详见[提前过滤数据](../optimization/README.md#advancefilter)。
:::

## 按主键合并追加{#merge}

按主键合并追加指的是将目标表和当前加工结果中主键相同的数据进行合并，再将当前加工结果中有而目标表中没有的数据追加至目标表中。

其中合并的方式根据**更新已有数据**勾选项来确定：

- 勾选：使用当前加工结果数据更新目标表数据
- 未勾选：跳过目标表和当前加工结果中主键相同的数据，不做任何修改

::: tip 注意
合并过程依赖于模型主键，所以此提取方式的前提是模型必须设置主键。如果未设置主键，保存会报异常。
:::

按主键合并追加常用于不能删除历史数据但是可以更新历史数据的场景，比如企业年报表，在年报截止日前，企业被允许多次修改已填报的年报数据，数据提取时可以用每日年报的数据来更新企业年报表。

示例说明：用还款信息ODS表的当日数据增量更新数据仓库中的合同还款计划信息表

具体步骤如下：

1. 过滤还款信息ODS表的当日变更数据（包括新增合同和发生还款业务的合同）\
   ![过滤还款信息ODS表](./images/2020-03-13-14-18-55.png)

2. 目标表设置主键

![目标表设置主键](./images/2020-03-13-14-20-43.png)

3. 设置提取方式为按主键合并追加

![按主键合并追加](./images/2020-03-13-14-14-37.png)

执行提取时，先根据主键更新目标表中已有合同的还款信息，如客户罚息、实收利息，再将新增的合同还款数据插入目标表中。

::: tip 提示
按主键合并追加是对目标表不进行任何删除操作前提下更新数据的提取方式。考虑到数据提取的性能，同样需要在模型输出节点前尽可能早的过滤出增量或变更部分的数据，详见[提前过滤数据](../optimization/README.md#advancefilter)。
:::

## 只追加{#append}

只追加指不对目标表数据做任何处理，直接将当前加工结果全部插入目标表。此方式适用于记录流水数据的场景，如将新产生的日志数据追加到日志表中。

示例说明：将每日操作流水日志保存到历史操作日志表中

![历史操作日志表](./images/2020-03-13-14-23-46.png)

执行提取时，直接将当前加工结果数据全部插入目标表。
