【发布时间】:2011-04-13 19:10:50
【问题描述】:
我正在写入 2008 SSIS 包中的平面文件目标。其中 99.99% 可以正常工作。但是,我在目标文件中得到了一条重复的记录。
这是包的基本流程:
1. 读取两个 ISO-8859-1 编码文件,并在内存中将其文本编码为 UTF8
2.在内存中将两个文件组合在一起,并加载到查找缓存中
3. 从磁盘读取另一个源文件
4. 将源文件中的 ID 列与查找缓存中的 ID 列匹配
5.如果ID与查找缓存中的ID匹配,则将其写入匹配文件,如果ID不匹配则将其写入另一个文件
一切从头到尾都有效。但是,我在匹配文件中得到了一个副本。我开始怀疑重复是由连接时查找缓存文本文件中的文件结尾(或其他)特殊字符引起的。这些文件是在 UNIX 系统上生成的(但我在阅读它们时将它们编码为 UTF8)。重复记录每次都是相同的记录。我如何避免获得副本(或找出副本的来源)?我不能使用删除重复项,因为目标中有合法的重复项。几个星期以来,我一直试图弄清楚这一点。
【问题讨论】:
-
我目前的理论是 SSIS 查找缓存不能处理来自平面文件源的超过 250,000 条记录。我认为它必须从源头(或类似的东西)再次读取,并且在执行此操作时会产生副本。我已经通过删除源中的重复行对此进行了测试。然后我得到另一条记录重复。然后我将总行数减少到大约 250,000 行,并且我没有得到任何重复。我已经运行了大约 10 次该过程,并且没有得到任何少于 250,000 条源记录的重复项。还有其他建议吗?
标签: sql-server-2008 file ssis duplicates flat