SSIS 查找行为很奇怪

Posted

技术标签:

【中文标题】SSIS 查找行为很奇怪【英文标题】:SSIS Lookup behavior is odd 【发布时间】:2016-04-22 15:41:27 【问题描述】:

我有一个行为异常的 SSIS 查找。在大多数情况下,它可以很好地匹配数据,但在许多情况下,当数据查看器显示数据匹配时,它不会提供匹配。真正奇怪的是,查找连接使用了没有 where 子句的 SQL 查询。如果我更改 SQL 查询以包含 where 子句,该子句仅返回与不匹配的行相似的行并重新运行它;然后数据匹配。

例如,如果 SQL 查询是:

Select ColumnA, ColumnB
From TableA

ColumnA 是我要查找匹配的列,ColumnB 是我要添加到数据流中的列。

查询提供这样的结果

AA, B

AC, D

BE, F

BG, H

(所有数据都是大写的,所以这不是问题)

我要匹配的输入列是 AC,但没有返回匹配项(它返回 AA 和 BG 的匹配项)。但是,如果我将查询更改为包含这样的 where 子句: where ColumnA like 'A%' (只返回两行)

然后我得到一个匹配。 有没有人以前见过这样的东西并修复过?

【问题讨论】:

您是要匹配相等的列还是包含某些值的列?添加两个表的清晰示例 我不能做样品;涉及专有和私人数据。我给出的例子说明了这个问题。来自源的列是 AC,它必须与提供 AC 的查询中的列相匹配。如果您以前从未见过这样的事情,那么您可能没有答案。 SELECT RTRIM(ColumnA) AS ColumnA, ColumnB 并确保您已将 RTRIM 应用于 SourceA - 您现在得到匹配吗? 您在 Lookup 中查询的表中有多少行?你在使用缓存吗? 如果不是大小写问题,那么可能是尾随空格。这些在 SQL 中被忽略,但在 SSIS 中很重要。 【参考方案1】:

我怀疑您的示例过于简单。

使用 SSIS 查找必须了解与数据库比较的区别。

完全缓存模式下的 SSIS 查找仅在内存中完成。这意味着比较是在 SSIS 组件内完成的,而不会关注您的数据库排序规则。因此,很容易遇到您在原始帖子中提到的大写问题。

可能存在细微差别:

前导或尾随空格 重音字符或其他可能受排序规则影响的内容 不同的数据类型。例如,如果您对数字数据类型进行查找,则如果它们具有完全相同的数据类型,则恰好匹配。 (24.00 与 24.0 不匹配)...

希望解决方案是上述之一。

【讨论】:

【参考方案2】:

我找到了答案,尽管我想评论所有关于通过删除前导/尾随空格等强制精确匹配的建议都已经尝试过了。

我发现,对于某些数据,不相关的函数调用会失败并停止查询,但在查找中它会静默失败,并且包将继续运行。我从未见过查询失败不会导致包失败,但在这种情况下会发生这种情况。因此,当这种情况发生时,应该匹配的数据不会被添加到查找缓存中,也不会找到匹配项。当使用仅返回相似行的 where 子句限制查询时,不会发生故障并且数据会匹配。这就是为什么这种行为看起来如此奇怪的原因。我不知道为什么查询失败时包不会失败。在我看来,包应该因查询错误而失败,而不是仅仅停止查询并继续包。

【讨论】:

以上是关于SSIS 查找行为很奇怪的主要内容,如果未能解决你的问题,请参考以下文章

shouldChangeCharactersInRange 的行为很奇怪

奇怪的 Visual Studio 行为:执行时间很长

Bash:遍历目录的行为很奇怪

Marshmallow RelativeLayout 与 alignBaseline 的行为很奇怪

真的很奇怪的drawRect行为??

UISegmentedControl 在 UITableView Header 上的行为很奇怪