【问题标题】:How to get unmatched data between two sources in SSIS Data Flow?如何在 SSIS 数据流中的两个源之间获取不匹配的数据?
【发布时间】:2018-06-04 13:18:09
【问题描述】:

我有两个数据源,一个 sql 表,一个平面文件 (csv)。两个来源都有完全相同的列。示例数据:

表:

HCN  Name  Surname   DOB
111  John   Black    2013-12-10
222  Jack   White    1989-01-14
333  Brian  Brown    2000-04-22

平面文件:

HCN  Name  Surname   DOB
111  John   Black    2013-12-10
444  Alex   Smith    1978-05-16

请注意,HCN 列是主键。我需要做的是让这些记录包含在表中,但 FlatFile。

预期输出:

HCN  Name  Surname   DOB
222  Jack   White    1989-01-14
333  Brian  Brown    2000-04-22

我必须在我的 SSIS 包的数据流中执行此操作。我正在下面获取匹配的记录(HCN:111),但是我无法弄清楚如何获得不匹配的记录。任何帮助将不胜感激。

【问题讨论】:

  • 使用 Lookup 而不是 Merge Join,然后使用 Not Matched 输出。 stackoverflow.com/questions/31253755/…
  • 接收错误:当我尝试将两个源文件都连接到查找时,“目标组件没有任何可用的输入用于创建路径”? @EzLo
  • 我认为您不能从平面文件连接中进行查找,对吗?
  • 将内容加载到先前数据流中的缓存管理器,然后您可以对缓存使用查找。

标签: sql ssis ssis-2008


【解决方案1】:

解决方案 1:查找:
您可以按照以下步骤操作:

  • 添加查找转换
    在连接选项卡中,选择您的平面文件连接
    在列选项卡中,拖放连接列 在一般选项卡中,通过重定向行处理不匹配的条目
  • 将不匹配的输出重定向到您的目标

解决方案 2:左反连接

您可以按照以下步骤操作:

1 对数据集进行排序/或修改源的属性为 isSorted =真

2在key上使用LEFT JOIN,并添加一个包含右侧id的新列

3 在右侧添加条件拆分条件 侧 ID 为空

然后将 CASE 1 拆分数据重定向到您的目的地,您只有左侧的行,没有右侧的对应关系

【讨论】:

  • 我只是按照 cmets 的建议添加替代解决方案 LOOKUP
  • 您不能在查找中使用平面文件。您是否建议将平面文件放入“缓存”连接,然后在查找中使用它?
【解决方案2】:

首先我建议您将平面文件数据加载到 OLEDB 临时表中,这是可选的。如果将平面文件数据加载到目标位置,则可以对齐主键以进行查找。

创建一个临时表来插入不匹配的记录,这种情况下你只需要异步转换

请参阅下面的查找转换

检查查找列:

这里是例子

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 2021-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多