SSIS 中的增量加载

在本文中,我们将通过示例向您展示如何在 SSIS 中执行增量加载。SSIS 增量加载意味着根据 ID、日期戳或时间戳将目标表与源数据进行比较。

  • 如果源数据中有任何新记录,我们必须将这些记录插入目标表中。例如,我们每天都要按销售分支插入。
  • 如果源数据中有任何更新值,我们必须将这些记录更新到目标表中。例如,更新客户地址。

在此示例中,我们展示了配置 SSIS 中增量加载所涉及的步骤。在开始创建包之前,让我们先看看源数据。

Source

现在,让我们也看看目标表中的数据。

Target

在这里,我们的任务是使用 SSIS 增量加载将额外的 4 条记录加载到目标表中,并更新第 2、5 和 10 行中的数据。

配置 SSIS 中的增量加载

步骤 1:将“数据流任务”从工具箱拖放到控制流区域,并将其重命名为 SSIS 中的增量加载。

Incremental Load in SSIS 1

双击它将打开 SSIS 数据流选项卡。

步骤 2:将 OLE DB 源 拖放到数据流区域。双击它将打开 OLE DB 连接管理器 设置。

从下面的屏幕截图中,您可以观察到我们选择以下数据库作为源数据库,选择 [CDC Source] 作为源表。

步骤 3:单击列选项卡以验证列。在此选项卡中,我们可以取消勾选不需要的列。

单击确定关闭 OLE DB 源,然后将 查找转换 从工具箱拖放到数据流选项卡。

Incremental Load in SSIS 4

步骤 4:双击查找转换将打开查找转换编辑器以配置查找表(引用表)。在“常规”选项卡中,“指定如何处理不匹配项的行”下,将默认的“失败组件”更改为“忽略失败”选项。

提示:请参阅 查找 文章以了解查找中存在的属性,以及 查找转换 文章以了解配置设置。

Incremental Load in SSIS 5

步骤 5:单击连接选项卡以配置查找连接设置。如果您已经创建了 OLE DB 连接管理器,请从列表中选择。否则,单击“新建”按钮并进行配置。这里我们选择了以下数据库。

接下来,我们使用查询作为查找表,因为我们只需要一列进行查找(即 Employee_ID),因此我们使用查询。

注意:通常,需求可能包括 ID 或日期和时间。

Incremental Load in SSIS 6

步骤 6:单击可用输入列,然后拖放到可用查找列以在两个数据集之间创建连接。源数据中的 Employee_ID 列将与查找表(即目标表)中的 [Employee_ID] 列进行比较。

Incremental Load in SSIS 7

步骤 7:拖动 条件拆分转换,并将查找匹配输出连接到条件拆分作为源。

Incremental Load in SSIS 8

步骤 8:双击它以提供条件。我们在这些转换中使用的条件是 ISNULL (LKP_Employee_ID)。这意味着条件拆分将检查查找的 employee ID 是否为 Null。

  • 如果 LKP_Employee_ID 为 Null,则表示目标表中不存在该记录。因此,我们想插入新记录。
  • 如果 LKP_Employee_ID 不为 Null,则表示目标表中已存在该记录。因此,我们想用新数据更新现有数据。

从上面可以看到,我们在条件拆分转换中使用了 1 个条件和 1 个默认输出。因此,我们总共得到两个输出。

Incremental Load in SSIS 9

步骤 9:将一个 OLE DB 目标 和一个 OLE DB 命令转换 拖放到数据流区域,然后将输出箭头拖到这个新的 OLE DB 目标。将出现一个名为“输入输出选择”的弹出窗口,提示您选择输入输出类型:插入或更新。

注意:要更新表数据,我们需要 SQL 查询来执行 UPDATE 语句。这就是为什么我们使用 OLE DB 命令转换。

Incremental Load in SSIS 10

步骤 10:双击 OLE DB 目标以选择 OLE DB 连接管理器,并选择数据库中的 [CDC Target] 表以插入新记录。

Incremental Load in SSIS 11

步骤 11:单击映射选项卡以检查源列是否与目标列精确映射。如果观察到以下屏幕截图,我们不映射 Employee_ID 列,因为它是自动递增的标识列。

Incremental Load in SSIS 12

步骤 12:双击 OLE DB 命令转换将打开 OLE-DB 命令的高级编辑器以进行配置。在连接管理器选项卡中,我们从列表中选择已创建的 OLE DB 连接。

Incremental Load in SSIS 13

在组件属性中,我们必须编写 SQL 语句来执行更新。请选择 SqlCommand 属性,然后单击浏览按钮(... 按钮)。单击浏览按钮后,将打开一个字符串值编辑器窗口来编写语句。在此示例中,我们正在更新 products 表中的值。

Incremental Load in SSIS 14

我们在上面的屏幕截图中使用的语句是:

UPDATE [CDC Target]
   SET [FirstName] = ?
      ,[LastName] = ?
      ,[Education] = ?
      ,[Occupation] = ?
      ,[YearlyIncome] = ?
      ,[Sales] = ?
 WHERE Employee_ID = ?

在列映射中,我们必须为参数分配适当的列名。

提示:第一个问号是参数 0,第二个问号是参数 1,依此类推。

Incremental Load in SSIS 15

单击确定以完成 SSIS 包中增量加载的配置。让我们运行该包。

Incremental Load in SSIS 15

让我们打开 SQL Server Management Studio,检查我们是否使用 SSIS 中的增量加载插入了新记录并更新了旧记录。

我建议您参考 更好的方法 – 增量加载 文章以进一步参考增量加载。

评论已关闭。