【问题标题】:SSIS Merge Join not matching all rows on inner joinSSIS合并联接不匹配内部联接上的所有行
【发布时间】:2021-08-01 15:47:08
【问题描述】:

我在 Azure SQL Server 中有两个表,当我在“GroupID”上直接使用 SQL Query 进行查询时,我得到了 5,698 行的预期输出。

但是,当我在 SSIS 中使用 Merge Join 使用内连接仅合并了 4,832 行。

我检查了元数据类型(都是 DT_I4 和排序,位置 1):

“名称”“数据类型”“精度”“比例”“长度”“代码页”“排序键” 位置”“比较标志”“源组件”

“GroupID”“DT_I4”“0”“0”“0”“0”“1”“”“INDEX”

“名称”“数据类型”“精度”“比例”“长度”“代码页”“排序键” 位置”“比较标志”“源组件”

“GroupID”“DT_I4”“0”“0”“0”“0”“1”“”“资产......”

许多帖子都在谈论数据类型不一致或尝试加入字符串。我检查了源数据是否会导致完整的内部联接,但我只是看不出是什么导致 SSIS 内部联接无法按预期工作。

有什么想法吗?

谢谢

【问题讨论】:

  • 所以你有一个内部连接正在删除预期值。下一步是从左侧识别应该匹配但不匹配右侧值的值。然后右边的值应该匹配但没有。最后,确认匹配的值符合预期。从您显示的内容来看,您似乎正确使用了该组件,因此我们假设数据与您的假设不符。
  • 这是 ADO.NET 还是 OLEDB 源?
  • 是的,重新删除值是正确的。数据源是 OLE 和目标 ADO。我决定不使用合并连接,而只是在数据源中使用 SQL 命令来执行我知道有效的内部连接。也许不是完美的解决方案,但会阻止项目向前发展。感谢您对billinkc 发表评论

标签: merge ssis inner-join


【解决方案1】:

此问题的解决方法(我还没有解决)是用 SQL 命令替换 Merge Join:OLE DB 源中的 INNER JOIN。

我想这在同一个数据库中是可以的,但如果你有不同的来源,那就不可能了。

【讨论】:

    【解决方案2】:

    如果匹配条件为 0 到 1,通用的解决方案是使用 Lookup 组件。一个人有一个死亡日期 - 它可能不存在,但只发生一次*

    如果匹配条件是 0 到多个,则 Merge Join 是有意义的。然而,Merge Join 的一个关键组成部分是两个数据集都必须排序。如果您在两个来源中没有明确的 ORDER BY(或在合并连接之前向 both 路径添加明确的排序),那么这将解释您的体验。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 2019-02-23
      相关资源
      最近更新 更多