我写这封信是为了征求解决即将出现的问题的想法。
为我们的ETL流程提供数据的产品目前有多个版本。我们的客户都在使用产品的某个版本,但并不是所有的客户都使用相同的版本,它们也不会同时升级。
随着新版本产品的推出,最常见的更改是添加新的数据列。列被删除或重命名可能偶尔会发生,但我们现在的主要关注点是如何处理新添加的列。
我们要解决的问题是如何为使用旧版本产品的客户处理数据。如果我们不考虑SSIS包中的新列,那么使用旧产品版本的客户端的那些列中的数据将不会被处理。
我们想要避免的是,必须为产品的每个版本维护单独的SSIS包版本。有没有人成功地实现了这种情况的解决方案?
发布于 2010-04-02 23:00:49
嗯,我不得不做一些类似的事情,我从不同的供应商那里得到了不同格式的不同文件,这些文件都必须放在同一个地方。我所做的是创建一个For Each循环容器,它在文件中运行,循环的第一步确定它沿着哪条路径运行。然后,我为每条路径编写了一个单独的数据流。
您可以使用一个表来实现这一点,该表列出每个版本的预期列,然后将其发送到匹配的版本的路径。
ALternatively,如果您知道每个客户的版本,您可以有一个表来存储该版本,并根据客户If确定路径。
或者你可以为每个版本编写一个新的包(在名称中包括版本),以避免在一个SSIS包中有20个不同的路径。然后在调用SSIS包中创建一个for each循环,然后将文件发送到正确的版本。或者简单地为每个客户端设置不同的作业,知道它们在哪个each版本上。然后,当他们升级到新版本时,您只需更改他们的作业调用的ssis包。
发布于 2010-04-02 23:23:10
这听起来像是您试图避免为所有不同的可能版本维护元数据。@HLGEM的解决方案很好,但它仍然需要您维护所有可能的版本组合的元数据。
我遇到过类似的情况,我们经常推出单独的客户端版本,较新的版本往往有额外的列,我们不能强迫用户升级到最新版本。对于原始数据来自数据库表的数据源,我们总是采用每一列,而不管用户的版本是什么。对于我们导入的平面文件,其中不同版本的模式不同,我们使用了三种不同的解决方案:
我不确定这些是否对你有帮助,但我希望你能从中提取一些有用的东西。祝好运。
https://stackoverflow.com/questions/2567279
复制相似问题