SSIS平面文件连接器不工作

时间:2013-05-16 01:07:48

标签: ssis

我在我设置的每个平面文件连接器上收到以下错误。平面文件连接器是在数据流任务

中从ADO.NET设置的
  

数据流任务错误[平面文件目标11 [1230]]:数字   平面文件目标的输入列.Inputs [平面文件   目标输入]不能为零。

     

数据流任务[SSIS.Pipeline]出错:“平面文件目标11”   验证失败并返回验证状态“VS_ISBROKEN”。

     

数据流任务错误[SSIS.Pipeline]:一个或多个组件失败   验证

     

数据流任务错误:任务验证期间出现错误。

我已经确认输入中有列,如下所示:

Flat file appears to be reading the columns correctly

我的data flow看起来像

enter image description here

元数据看起来合适

enter image description here

列映射

enter image description here

1 个答案:

答案 0 :(得分:9)

不要像这样构建数据流。他们将需要一段时间来验证(组件一个接一个地得到验证),并且您将获得有限数量的并行运行,因为它们都在相同的数据流中。如果所有这些来源都在同一个数据库中,您也可能会遇到锁定问题 - 请参阅Too Many Sources in a Data Flow

如果您已确认所有平面文件目标都已映射其输入列,并且您仍然收到此错误,那么可能是SSIS数据流处理的源/目标映射太多/验证正确。您可能想尝试以下设计方案之一。

可管理性与性能

当您使用这么多目的地时,我建议采用可管理的方法。如果每个源的元数据相同 - >目标映射,您可以使用单个数据流执行此ETL。

  1. 使用“SourceQuery”和“OutputFileName”列创建数据库表
  2. 在表格中为每个源/输出映射添加一行
  3. 在控制流程中,选择表格中的所有行
  4. 将ResultSet设置为完整结果集
  5. 将结果存储在对象变量(objResultSet)
  6. 使用带有ADO枚举器的Foreach循环容器来读取每一行 来自objResultSet
  7. 将结果集中的列映射到包变量
  8. 使用将SourceQuery变量映射到ADO.NET Source查询 表达式
  9. 将OutputFileName变量映射到Flat File Connection 经理的文件路径
  10. 如果您认为性能比可管理性更重要,并且您希望为您的方案添加更多并行性,那么您可以考虑一些不同的事情。您采用的方法取决于这些源查询的不同,以及您是要在数据库级别还是在SSIS数据流中进行计算。有很多方法可以做到这一点 - 这里有一些要记住的事情。

    • 使用多个数据流任务允许更多的并行性,并且通常在单个数据流中具有多个源的情况下表现更好。您应该在数据流中使用多个源的唯一时间是合并/加入行(并且无法在源查询中完成连接)
    • 如果您需要的所有数据都适合单个源查询,请使用单个源组件和条件性拆分转换将行发送到相应的目标
    • 如果您需要在多个路径中使用相同的行,请使用多播转换
    • 您可以使用聚合转换计算总和/计数,但将其推送到源查询可能会更快