2

我设置的每个平面文件连接器都出现以下错误。平面文件连接器是从 ADO.NET 在数据流任务中设置的

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

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

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

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

我已经验证输入中有列,如下:

平面文件似乎正在正确读取列

我的数据流看起来像

在此处输入图像描述

元数据看起来合适

在此处输入图像描述

列映射

在此处输入图像描述

4

1 回答 1

9

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

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

可管理性与性能

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

  1. 使用“SourceQuery”和“OutputFileName”列创建数据库表
  2. 在表中为每个源/输出映射添加一行
  3. 在控制流中,从表中选择所有行
  4. 将结果集设置为完整结果集
  5. 将结果存储在对象变量 (objResultSet) 中
  6. 使用带有 ADO 枚举器的 Foreach 循环容器从 objResultSet 中读取每一行
  7. 将结果集中的列映射到包变量
  8. 使用表达式将 SourceQuery 变量映射到 ADO.NET Source 查询
  9. 将 OutputFileName 变量映射到平面文件连接管理器的文件路径

如果您觉得性能比可管理性更重要,并且您想为您的场景添加更多并行性,那么您可以考虑一些不同的事情。您采用的方法将取决于这些源查询的不同之处,以及您是要在数据库级别还是在 SSIS 数据流中进行计算。有很多方法可以做到这一点 - 这里有一些事情要记住。

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