SSIS:将 non-existent 列添加到 CSV 源

SSIS: add non-existent column to a CSV source

我正在使用标准 SSIS 方法将大量(成千上万)CSV 文件加载到单个暂存 sql 服务器 table 中。

绝大多数 CSV 源文件具有相同的列结构(顺序、列集、数据类型)。总共有大约 140 列。

但是,在某些 (<1%) 情况下,源文件将缺少某些列(我确切地知道它们是哪些列,并且缺少列的三种可能组合)。这是设计使然,即这是一个有效的业务场景 (meh)。

如果(且仅当)物理源 CSV 文件中不存在该列时,我能否以某种方式为源 CSV 连接创建 "virtual" 列(填充 NULL/empty/blank 值)?

我知道我可以使用 C# 脚本组件读取 CSV header 并创建多个源连接,并且 re-direct 根据某些列的存在(或缺少)到正确的数据流,但我我希望有一个更 "elegant" 的解决方案,只需一个 CSV 数据源 "smart" 就足以 "artificially" 添加源文件中缺少的空白列。

为简单起见,我们假设完整的列集是:

ID;C1;C2;C3

并且 C3 偶尔会丢失,即一些 CSV 文件是:

ID;C1;C2

欢迎任何提示。

不,SSIS 中没有内置 "smart" CSV 数据源。

您当然需要使用脚本组件,但不是在数据流外部使用脚本任务将控制流引导至正确的数据流,您可以简单地创建一个具有脚本组件的数据流作为数据源。脚本组件读取当前正在导入的 CSV,如果缺少相关列,它会为其提供 NULL 或默认值。