首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不维护SSIS包的多个版本的情况下处理添加的输入数据列?

如何在不维护SSIS包的多个版本的情况下处理添加的输入数据列?
EN

Stack Overflow用户
提问于 2010-04-02 22:51:53
回答 2查看 133关注 0票数 0

我写这封信是为了征求解决即将出现的问题的想法。

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

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

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

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

EN

回答 2

Stack Overflow用户

发布于 2010-04-02 23:00:49

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

您可以使用一个表来实现这一点,该表列出每个版本的预期列,然后将其发送到匹配的版本的路径。

ALternatively,如果您知道每个客户的版本,您可以有一个表来存储该版本,并根据客户If确定路径。

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

票数 1
EN

Stack Overflow用户

发布于 2010-04-02 23:23:10

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

我遇到过类似的情况,我们经常推出单独的客户端版本,较新的版本往往有额外的列,我们不能强迫用户升级到最新版本。对于原始数据来自数据库表的数据源,我们总是采用每一列,而不管用户的版本是什么。对于我们导入的平面文件,其中不同版本的模式不同,我们使用了三种不同的解决方案:

  1. Conditional Splits:这是一种最明显的解决方案,它可以在变化很少的情况下很好地工作,并且是一种根据行的几个属性来检测差异的简单方法。这不能很好地扩展到管理复杂的更改,因为表达式变得太难编写和maintain.
  2. Script转换:如果将每行作为单个字符串读入,则可以使用脚本任务来确定是否需要写出额外的列。当有许多、许多、许多不同的字段组合和用于确定使用哪个路径的规则是高度XML元数据时,这种方法效果很好:对于导入complex.
  3. Table-driven文件的一角情况,我构建了一个带有版本号的控制表。我基本上是将XML加载到表中的XML数据类型中,然后在存储过程中处理XML。然后,该包迭代每个版本号,并从表中动态生成所需的SQL,以便从XML中提取正确的节点,然后将原始行标记为已处理。对于我的流程来说,这是一个很好的解决方案,但这种方法的主要挑战是知道何时向控制表添加新行。基本上,我必须在开发小组的SDLC表单上给他们一个复选框,要求他们让我签字确认我收到了主要版本更改的新架构更改。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2567279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档