SSIS平面文件-如何处理文件版本/生成

SSIS平面文件-如何处理文件版本/生成,ssis,flat-file,Ssis,Flat File,我在一个数据仓库项目中工作,有很多源创建平面文件作为源,我们正在使用SSI将它们加载到我们的暂存表中,我们目前正在使用平面文件源组件 然而,过了一段时间,我们需要在其中一个文件中添加一个额外的列,并且从某个日期开始,文件规范将更改为添加该额外的列。这个练习经常发生,并且随着时间的推移积累了很多版本 根据我在这里和互联网上找到的答案,处理这种情况的商定方法似乎是在这个版本的新单独数据流中设置一个新的平面文件源,以保持旧文件ETL过程的可重新运行性。 方法概述如下,例如: 在我们的特定设置中,附加列

我在一个数据仓库项目中工作,有很多源创建平面文件作为源,我们正在使用SSI将它们加载到我们的暂存表中,我们目前正在使用平面文件源组件

然而,过了一段时间,我们需要在其中一个文件中添加一个额外的列,并且从某个日期开始,文件规范将更改为添加该额外的列。这个练习经常发生,并且随着时间的推移积累了很多版本

根据我在这里和互联网上找到的答案,处理这种情况的商定方法似乎是在这个版本的新单独数据流中设置一个新的平面文件源,以保持旧文件ETL过程的可重新运行性。 方法概述如下,例如:

在我们的特定设置中,附加列始终是附加列(从不删除旧列),而且,出于逻辑原因,如果我们在单独的数据流中保持旧文件的可重新运行性,则新列也不能强制

我认为,对于像我们这样的数据仓库项目,反复创建处理同一组列的重复数据流的方法不是一个好的答案,我会预先选择一个源组件,该组件采用上一个文件版本,并且能够将列标记为“not mandadory”,如果缺少,则提供空值

有人知道SSIS平面文件组件在处理旧文件版本时更灵活,或者有更好的解决方案解决此问题吗? 我假设这样一个组件需要在命名列的基础上处理文件,而不是现有的从左到右的方法


欢迎有任何想法或建议

以下内容在处理时会失去效率(与使用单独的数据流相比),但会为您提供在单个数据流中处理多个文件类型的灵活性

通过仅指定行分隔符,可以将平面文件连接安排为返回行而不是单个列。将其连接到平面文件源组件,该组件将每行输出一列。现在,我们有一行表示您知道的许多文件类型中的一种,下一步是确定您使用的文件类型

使用带有脚本组件的平面文件类型的输出。传入一列并传出所有可能列的超集。我们丢失了通常从文件源获取的元数据,因此需要在脚本组件输出类型中建立列名/类型/大小

在脚本组件中,传递该行并将其拆分为组件列。您必须执行模式匹配(可能使用RegularExpression.Regex.match)来标识新列何时开始。希望该文件格式良好,这将有助于您-注意文本列中的引号和逗号

现在,您可以通过确定您拥有的列数和默认缺少的列来访问文件类型。设置行的输出列以传递组成部分。您可能需要附加一个新列以记录输出的文件类型

过程的其余部分应该能够使用单个数据流加载表,因为您已经满足了脚本中所有文件类型的要求


我不建议您轻率地执行上述操作。当您必须对所有列/类型等进行编码时,SSIS的好处会有所减少,但是它将为您提供一个单独的数据流来处理每个文件版本,并且可以在传递新列时进行扩展。

Flat file没有版本,这是获得新版本的唯一方法(不可重用)是比较新平面文件和旧平面文件的元数据。这说起来容易做起来难。