【问题标题】:SSIS - Only Load Certain Records - Skip the remainingSSIS - 仅加载某些记录 - 跳过剩余的
【发布时间】:2015-04-02 20:37:22
【问题描述】:

我有一个要加载到 SQL 中的平面文件,该平面文件有 2 个不同的 RecordTypes 和 2 个基于 RecordType 的不同文件布局。 所以我可能有

000010203201501011 (RecordType 1)
00002XXYYABCDEFGH2 (RecordType 2)

所以我想立即检查 RecordType1 的记录,然后通过 [Derived Column] & [Data Conversion] & [Loading to SQL] 发送这些记录

我想忽略 RecordType2 的所有记录。

我尝试了条件拆分,但似乎 RecordType2 的记录仍在尝试通过 [Derived Column] 和 [DataConversion] 步骤。

它在 RecordType2 记录上给我一个 DataConversion 错误。

我已将条件拆分设置为 RecordType == 1,以通过我设置的流程。

我猜条件拆分没有设置为以这种方式使用? 在我的流程中,我可以告诉它检查 RecordType1 并仅发送超过 RecordType=1 的记录?

【问题讨论】:

  • 这似乎不是一件应该很难做到的事情?我不知道为什么我在网上找不到更多关于这个的信息?
  • SSIS 不能很好地处理混合记录格式的文件。大型机喜欢它们,SSIS 讨厌它们。
  • 也就是说,您没有提供足够的信息来解决您的问题。如果您的 Ragged Right 平面文件连接管理器定义为 2 列,RecordType 是长度为 5 的 DT_STR,TheRest 是前 5 个字符之外的所有内容。如果您的 Conditional Split 正在测试 00001,那么唯一可能沿着这条路线走的就是 1 条记录
  • 我的平面文件由 530 个列名定义。 - 直到 2015 年,所有记录都是 RecordType1。现在他们将 RecordType2 包含在同一个文件中。 RecordType 2 只有 190 列(最后有一个 Filler 以使其与 RecordType1 的长度相同。
  • 我发现的一件事是我需要在开始时将平面文件源编辑器中的所有截断和错误设置为“忽略”。现在我已将所有设置为“忽略失败”,我可以进入条件拆分。在条件拆分中,我有一个 RecordType==1 的表达式。然后我将默认条件设置为 RowCount。看来我现在已经接近了。

标签: sql ssis ssis-2012


【解决方案1】:

您对 Record Type 2 行有数据类型错误是完全有道理的,因为您可能已经根据 Record Type 1 记录定义了列及其数据类型。我看到三个选项可以实现您想要做的事情:

  1. 在控制流中有一个脚本任务来仅复制记录类型 1 记录到您的数据流将使用的新文件 已经有(Pro:你不需要接触数据流,Con: 读取文件两次),或者
  2. 在现有数据流中:而不是从 数据源,读取来自文件的每一行作为一个大胖子 列,然后是派生列以获取 RecordType,然后是条件 拆分,然后是派生列以重新创建您拥有的所有列 在数据源中定义,或者
  3. 理想情况下,如果您有另一个包处理记录类型 2 行: 将文件转储到暂存区的数据库表中,然后 将数据流中的数据源替换为 OLEDB 数据源 (或您使用的任何东西)并用某些东西获取+过滤记录 喜欢:SELECT substring(rowdata,1,5) AS RecordType, substring(rowdata,6,...) AS Column2, .... FROM STG.FileData WHERE substring(rowdata,1,5) = '00001'。如果使用这种方法,它会 最好有一个 RecordType 专用列

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    相关资源
    最近更新 更多