我们有10个稍微不同的SSIS包,可以将数据从一个数据库传输到另一个数据库。每当我们对第一个数据库进行更改时,例如添加新字段或更改所述字段的属性(例如扩展varchar的长度),我们也必须更新包。
这些包中的每一个都有一个包含多个合并连接,排序,条件语句等的长流程。如果需要更改的字段位于流程的开头,我必须完成每个合并并使用新的变化,每次我这样做,需要几分钟的时间来处理,然后我就到了下一个。当我接近结束时,为每个合并连接计算该过程所需的时间越来越长。对10个不同的包进行此操作,即使它们同时完成,仍然需要3个小时。这是耗时且非常单调的。必须有一个更好的方法,对吧?
答案 0 :(得分:1)
BIML非常适合这一点。 BIML是一种基于XML的技术,可转换为dtsx软件包。 BIMLScript是与c#或vb交叉的BIML,用于提供控制流逻辑,因此您可以根据条件创建多个包/包元素。您可以轻松查询表结构或自定义元数据,这样,如果您只进行数据库到数据库转换,则可以对数据库进行结构更改并重新生成SSIS包,而无需进行任何编辑。
答案 1 :(得分:0)
简短的回答是否定的。 SSIS生成的元数据使得数据源发生变化时非常尴尬。您可以沿着动态生成的软件包的路走下去,但这并不理想。
你的另一个选择是减少伤害。考虑是否可以实现Canonical Data Model模式:
http://www.eaipatterns.com/CanonicalDataModel.html
它可能涉及在接收数据时立即将数据映射到某种内部格式,可能通过临时表或缓存,然后仅使用内部格式。然后在处理结束时映射回输出格式。
虽然这确实会增加程序包的整体复杂性,但这意味着外部数据源的更改只会影响处理开始和结束时的转换,从长远来看,这可能会为您节省大量时间。 / p>