【问题标题】:Duplicate Records in SSIS Flat File DestinationSSIS 平面文件目标中的重复记录
【发布时间】: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


【解决方案1】:

首先将数据放入暂存表,即您可以查询的表。也许您可以看到如何在联合中获得副本。另外,如果你有有效的 opnes,你怎么知道这是一个无效的重复?是什么让它无效?

【讨论】:

  • 很好的解决方案 HLGEM。我发现将数据放入暂存表作为第一步会有所帮助。登台表具有所有 VARCHAR/NVARCHAR 列。如果在数据类型转换或重复的进一步处理中出现问题,通过对临时表运行普通 SQL 语句很容易发现。
  • 感谢您的回答。写入表不是一种选择。我没有能力创建测试表。我一直在写文件来检查结果。我知道副本无效有两个原因。首先,它是旧的大型机进程所没有的额外记录。此外,源文件中有 103 个这些 ID,我的新文件中有 104 个。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    相关资源
    最近更新 更多