SSIS平面文件连接器不工作

Jul*_*gan 2 ssis

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

数据流任务时出错[Flat File Destination 11 [1230]]:Flat File Destination 11的输入列数.Inputs [Flat File Destination Input]不能为零.

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

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

数据流任务出错:任务验证期间出错.

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

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

我的数据流看起来像

在此输入图像描述

元数据看起来合适

在此输入图像描述

列映射

在此输入图像描述

小智 9

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

如果您已确认所有平面文件目标都已映射其输入列,并且您仍然收到此错误,那么可能是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 Manager的文件路径

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

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

  • 实际问题是我需要进入每个平面文件输出的"映射"选项卡,并在取消之前点击确定,但为了将来参考,我认为这将是一个更__manageable_解决方案.标记为答案.当我查看它们时,我看到它们已经设置好了,但是由于我从对话框中取消而没有应用默认值.只有在您点击映射选项卡时才会应用默认值.另外,在单独的查询中使用每个"Section"的主要原因是我不知道如何处理多表结果集. (2认同)