有没有更快的方法在 SSIS 包中添加列或更改字段?

Is there a quicker way to add column or change fields in SSIS packages?

我们有 10 个略有不同的 SSIS 包,它们将数据从一个数据库传输到另一个数据库。每当我们对第一个数据库进行更改时,例如添加新字段或更改所述字段的属性(例如扩展 varchar 的长度),我们也必须更新包。

这些包中的每一个都有很长的流程,有多个merge join、sorts、conditional statements等,如果需要更改的字段在流程的开始,我必须经历每次合并和更新它带有新的更改,每次我这样做,都需要几分钟的时间来处理,然后我会进行下一个。当我接近尾声时,计算每个合并联接的过程花费的时间越来越长。为 10 个不同的包执行此操作,即使它们同时完成,仍然需要超过 3 个小时。这是耗时且非常单调的。一定有更好的方法,对吧?

简短的回答是否定的。 SSIS 生成的元数据使得数据源更改时非常尴尬。您可以走动态生成包的道路,但这并不理想。

你的另一个选择是减少伤害。考虑您是否可以实施规范数据模型模式:

http://www.eaipatterns.com/CanonicalDataModel.html

这将涉及在接收数据时立即将数据映射到某种内部格式,可能是通过临时 table 或缓存,然后从那时起只使用您的内部格式。然后在处理结束时映射回输出格式。

虽然这确实会增加包的整体复杂性,但这意味着外部数据源的更改只会影响处理开始和结束时的转换,这很可能会在漫长的过程中为您节省大量时间 运行.

BIML 对此非常有用。 BIML 是一种基于 XML 的技术,可转换为 dtsx 包。 BIMLScript 是 BIML 与 c# 或 vb 交错以提供控制流逻辑,因此您可以根据条件创建多个 packages/package 元素。您可以轻松查询 table 结构或自定义元数据,这样如果您只进行数据库到数据库的转换,您可以对数据库进行结构更改并重新生成 SSIS 包,而无需进行任何编辑。