【问题标题】:How to make SSIS choose data source depending on parameter?如何让 SSIS 根据参数选择数据源?
【发布时间】:2013-08-23 03:37:16
【问题描述】:

我有一个 SSIS 数据流任务,它读取包含某些字段的 CSV 文件,稍作调整并将结果插入表中。源文件名是一个包参数。那里一切都很好。

现在,我需要处理带有额外字段的稍微不同类型的 CSV 文件。这个额外的字段可以安全地忽略,所以处理本质上是一样的。唯一的区别在于数据源的列映射。

当然,我可以创建整个包的副本并调整数据源以匹配第二种文件格式。然而,这个“解决方案”似乎是可怕的重复:如果处理过程中有任何变化,我将不得不做两次。我宁愿将另一个参数传递给包,告诉它要处理哪种文件。

问题是,我不知道如何根据参数从一个数据源或另一个数据源读取 SSIS,因此问题。

【问题讨论】:

  • 可能是这个问题的副本,所以我会看看我的答案是否不适用于这里。 stackoverflow.com/questions/8168548/…
  • 这可能有效。我会检查并告诉你。
  • 再想一想,这仅适用于两种 CSS 文件具有完全相同的列名,可能顺序不同并且省略了某些列的情况。例如。如果一个文件包含“Price”列,而另一个文件包含“FinalPrice”,则需要条件查询逻辑,因此原始问题成立。

标签: ssis


【解决方案1】:

我会复制 SSIS 包中的连接管理器(CSV 定义)和数据流,并针对新的文件格式调整它们。然后我会使用您描述的参数来启用/禁用任一数据流。

本质上,SSIS 不适用于可变元数据。如果这将是一个反复出现的模式,我将在 SSIS 上游处理它,构建一个 VB/C# 命令行应用程序将文件切碎成 SQL 表。

【讨论】:

    【解决方案2】:

    您可以让连接管理器将所有数据推送到 1 列中。然后使用脚本转换组件将数据解析到输出,具体取决于行中的字段数。

    您可以根据分隔符将数据拆分为一个字符串数组(当我需要这样做时,我在 Google 上寻求帮助)。使用数组,您可以知道它的大小,从而知道它连接到的文件类型。

    然后,您到目的地的映射可以保持不变。也不需要复制任何组件。

    我不得不自己做一次类似的事情,因为虽然我使用的文件总是相同的格式 - 取决于发送文件的系统版本,它可能会改变 - 因此通过在脚本中处理它通过这种方式转换,我能够处理文件格式的微小变化。如果文件 99% 始终相同,那没关系。如果它们完全不同,您最好使用单独的文件连接管理器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      相关资源
      最近更新 更多