0

我写信是为了征求解决即将到来的问题的想法。

为我们的 ETL 流程提供数据的产品目前有多个版本。我们的客户都在使用产品的某个版本,但并非都使用相同的版本,它们不会同时升级。

随着新版本产品的推出,最常见的变化是添加新的数据列。列被删除或重命名可能偶尔会发生,但我们现在主要关注的是如何处理添加的新列。

我们要解决的问题是如何为使用旧版本产品的客户处理数据。如果我们不考虑 SSIS 包中的新列,则不会处理使用旧产品版本的客户的这些列中的数据。

我们想要避免的是必须为每个版本的产品维护一个单独版本的 SSIS 包。有没有人成功地为这种情况实施了解决方案?

4

2 回答 2

1

好吧,我必须做一些类似的事情,从不同的供应商那里得到不同格式的不同文件,这些文件都必须去同一个地方。我所做的是创建一个 For Each 循环容器,它在文件中运行,循环的第一步确定它走的路径。然后我为每条路径写了一个单独的数据流。

您可以使用列出每个版本的预期列的表来执行此操作,然后将其发送到它匹配的版本的路径。

或者,如果您知道每个客户的版本,您可以有一个存储该版本的表,并从 customerid 确定哪个路径。

或者您可以为每个版本编写一个新包(在名称中包含版本),以避免在一个 SSIS 包中有 20 个不同的路径。然后在调用 SSIS 包中有一个 for each 循环,然后将文件发送到正确的版本。或者简单地为每个客户设置不同的作业,知道他们使用的是什么 ppackage 版本。然后你可以在他们升级到新版本时更改他们的工作调用的 ssis 包。

于 2010-04-02T15:00:48.927 回答
0

听起来您正试图避免为所有不同的可能版本维护元数据。@HLGEM 的解决方案很好,但它仍然需要您为所有可能的版本组合维护元数据。

我遇到过类似的情况,我们定期推出单独的客户端版本,较新的版本往往有额外的列,我们不能强制用户升级到最新版本。对于原始数据来自数据库表的数据源,无论用户的版本如何,我们总是取每一列。对于我们导入的平面文件(版本之间的架构不同),我们使用了三种不同的解决方案:

  1. 条件拆分:最明显的解决方案在变化很少时效果很好,并且是一种基于行的一些属性检测差异的简单方法。这不适用于管理复杂的更改,因为表达式变得难以编写和维护。

  2. 脚本转换:如果您将每一行作为单个字符串读取,则可以使用脚本任务来确定是否需要写出额外的列。当字段组合有很多很多不同的组合并且用于确定使用哪个路径的规则非常复杂时,这很有效。

  3. 表驱动元数据:对于我导入 XML 文件的一个极端情况,我构建了一个带有版本号的控制表。我基本上将 XML 加载到表中的 XML 数据类型中,然后在存储过程中处理 XML。然后,该包遍历每个版本号,并从表中动态生成它需要的 SQL,以从 XML 中提取正确的节点,然后将原始行标记为已处理。这对我的流程来说是一个很好的解决方案,但该方法的主要挑战是知道何时向控制表添加新行。我基本上必须在他们的 SDLC 表单上给开发组一个复选框,要求他们让我签署我收到了主要版本更改的新架构更改。

我不确定这些是否对你有帮助,但我希望你能从中提取一些有用的东西。祝你好运。

于 2010-04-02T15:23:09.927 回答