2011-04-13 93 views
0

我正在写入2008年SSIS包中的平面文件目标。它的99.99%正常工作。但是,我在目标文件中获得一个重复记录。SSIS平面文件目标中的重复记录

这里是包的基本流程:
1.读取的两个ISO-8859-1编码的文件和编码它们的文本到UTF8在存储器
2.合并两个文件一起在存储器并加载它们成查找高速缓存
3.从磁盘读取
4.匹配从源文件的ID列中查找缓存
5.如果ID在查找高速缓存中的ID匹配的ID列中的另一源文件,将其写入到匹配文件,如果ID不匹配将其写入另一个文件

一切正常 从开始到结束。但是,我在匹配文件中得到了重复。我开始怀疑复制是由加入时查找缓存文本文件中的文件结尾(或其他)特殊字符引起的。这些文件是在UNIX系统上生成的(但我在阅读时将它们编码为UTF8)。重复记录每次都是相同的记录。我如何避免重复(或找出重复的来源)?我无法使用删除重复项,因为目标中有合法的重复项。我一直试图弄清楚这几个星期。

+0

我目前的理论是,SSIS查找缓存不能处理来自平面文件源的超过250,000条记录。我认为它需要再次从源代码中读取(或者沿着这些代码行),并且在执行此操作时会生成一个副本。我通过删除源文件中的重复行来测试了这一点。然后我得到另一个重复的记录。然后我把总行数减少到约25万,并且我没有得到任何重复。我已经运行了大约10次的流程,并且没有收到少于250,000条源记录的重复项。 还有其他建议吗? – 2011-04-15 15:39:01

回答

1

我想出了这个问题。在阅读消除该行的源时,我没有将字段设置为空字符串。然后,该行被匹配到查找变换中的一个随机行,并继续并写入目标。

1

首先将数据放入登台表,您可以查询的表。也许你可以看到如何联合起来获得重复。另外,如果你有有效的opnes,你怎么知道这是一个无效的重复?是什么使它无效?

+0

良好的解决方案HLGEM。作为第一步,我发现将数据放入临时表中会有所帮助。登台表具有所有VARCHAR/NVARCHAR列。如果进一步处理数据类型转换或重复出现问题,通过针对临时表运行正常的SQL语句很容易发现。 – thomasswilliams 2011-04-13 22:57:44

+0

感谢您的回答。写入表格不是一种选择。我没有能力创建测试表。我一直在写文件来检查结果。我知道重复是无效的,原因有两个。首先,这是旧的大型机进程没有的额外记录。此外,源文件中有103个ID和我的新文件中有104个ID。 – 2011-04-14 15:48:08