【发布时间】:2018-03-13 18:15:11
【问题描述】:
我有一个 SSIS 包,其中将来自多个 CSV 文件的数据加载到 SQL Server。问题不是所有文件都具有相同的列集,很少有文件没有数据库中的所有列 w.r.t 表。当我使用 foreach 循环运行包时,当 csv 文件中不存在 cloumn 时,它会引发错误,这是根据提供的映射预期的。如何克服这种情况?
【问题讨论】:
-
使文件统一,这样它们就不会丢失列。
标签: ssis
我有一个 SSIS 包,其中将来自多个 CSV 文件的数据加载到 SQL Server。问题不是所有文件都具有相同的列集,很少有文件没有数据库中的所有列 w.r.t 表。当我使用 foreach 循环运行包时,当 csv 文件中不存在 cloumn 时,它会引发错误,这是根据提供的映射预期的。如何克服这种情况?
【问题讨论】:
标签: ssis
研究使用 BiML,它在执行时根据可用的元数据动态构建包。因此,它将查看 CSV 文件中的列,并构建与 CSV 中的列匹配的数据流。
【讨论】:
不幸的是,SSIS 使用每种文件类型的静态元数据(列信息)。因此,尝试将错误的文件加载到特定的 csv 格式总是会发生冲突并失败。您必须为正在使用的每种文件格式创建一个 DataFlow 任务。那么问题是什么时候使用哪个。
您可以尝试以下方法:
您可以级联您的控制流,这样如果您尝试第一个 csv 格式失败,它会自动尝试第二个,依此类推。但是,很难将带有一些错误(例如奇怪的字符或缺少行的列分隔符)的正确文件与格式错误区分开来。
您可以尝试使用脚本任务(如 c#)将所有格式统一为标准格式。这仅适用于文件包含相同类型的信息或实体的情况。
我会尝试按顺序实现它们。
如果您需要考虑的不同 csv 格式非常大(例如 N 列的组合爆炸),那么您唯一的选择就是脚本任务。
【讨论】: