【问题标题】:Is there a quicker way to add column or change fields in SSIS packages?有没有更快的方法在 SSIS 包中添加列或更改字段?
【发布时间】:2015-01-05 21:24:36
【问题描述】:

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

这些包中的每一个都有一个很长的流程,包含多个合并连接、排序、条件语句等。如果需要更改的字段是在流程的开头,我必须通过每个合并并更新它新的更改,每次我这样做时,都需要几分钟的时间来处理,然后我会进入下一个。当我接近尾声时,计算每个合并连接的过程需要越来越长的时间。对 10 个不同的包执行此操作,即使它们同时完成,仍然需要 3 个小时以上。这是耗时且非常单调的。一定有更好的方法吧?

【问题讨论】:

  • 如果你能很好地描述你的逻辑,那么你可以使用像 Biml 或 EzAPI 这样的东西来自动生成你的包。然后您可以进行所有您想要的更改,并且包是基于当前元数据创建的,而不是以前的。就个人而言,我是 Biml 方法的粉丝。

标签: sql-server ssis packages


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    简短的回答是否定的。当数据源发生变化时,SSIS 生成的元数据会让人很尴尬。您可以走动态生成包的道路,但这并不理想。

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

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

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

    虽然这确实增加了包的整体复杂性,但这意味着更改外部数据源只会影响处理开始和结束时的转换,从长远来看,这可能会为您节省大量时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多