【问题标题】:SSIS CSV to SQL: Different files with different set of columnsSSIS CSV to SQL:具有不同列集的不同文件
【发布时间】:2018-03-13 18:15:11
【问题描述】:

我有一个 SSIS 包,其中将来自多个 CSV 文件的数据加载到 SQL Server。问题不是所有文件都具有相同的列集,很少有文件没有数据库中的所有列 w.r.t 表。当我使用 foreach 循环运行包时,当 csv 文件中不存在 cloumn 时,它会引发错误,这是根据提供的映射预期的。如何克服这种情况?

【问题讨论】:

  • 使文件统一,这样它们就不会丢失列。

标签: ssis


【解决方案1】:

研究使用 BiML,它在执行时根据可用的元数据动态构建包。因此,它将查看 CSV 文件中的列,并构建与 CSV 中的列匹配的数据流。

【讨论】:

  • 当然,我会尝试的。有关如何实现 BiML 的任何参考?
  • 不,我没有特别喜欢的参考资料。只需用谷歌搜索并获得最佳结果之一。
【解决方案2】:

不幸的是,SSIS 使用每种文件类型的静态元数据(列信息)。因此,尝试将错误的文件加载到特定的 csv 格式总是会发生冲突并失败。您必须为正在使用的每种文件格式创建一个 DataFlow 任务。那么问题是什么时候使用哪个。

您可以尝试以下方法:

  1. 在尝试处理之前确定哪种格式与哪个文件对应 它。也许文件名或其位置可以确定哪种格式 它有。然后,您可以使用条件表达式来切换您的 控制流到相应的 csv 格式。
  2. 使用脚本任务(如 c#)来确定它的格式。您可以使用自定义代码来解释 csv 标头名称并将其与您的一种格式相匹配,然后更新一个 SSIS 变量,该变量将控制流切换到该特定文件的该格式。
  3. 您可以级联您的控制流,这样如果您尝试第一个 csv 格式失败,它会自动尝试第二个,依此类推。但是,很难将带有一些错误(例如奇怪的字符或缺少行的列分隔符)的正确文件与格式错误区分开来。

  4. 您可以尝试使用脚本任务(如 c#)将所有格式统一为标准格式。这仅适用于文件包含相同类型的信息或实体的情况。

  5. 您可以使用脚本任务(如 c#)直接处理任何文件。这将是一种矫枉过正,您实际上会压倒 SSIS 文件处理的好处。

我会尝试按顺序实现它们。

如果您需要考虑的不同 csv 格式非常大​​(例如 N 列的组合爆炸),那么您唯一的选择就是脚本任务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2019-06-10
    • 2021-10-04
    相关资源
    最近更新 更多