SSIS - 支持我们产品的多个版本
我们的企业数据仓库整合了来自多个数据源的数据。我们有一个要求,我们应该能够同时支持从这些数据源的不同版本收集数据。
前任。客户安装了我们产品的三个不同版本 7.3、7.3.1 和 7.3.2。在这种情况下,数据仓库将在版本 7.3.2 上,但应该能够从数据源的先前版本收集数据。
我们使用存储过程将数据从源收集到我们的暂存区,然后我们将其转换并加载到仓库中。SSIS 包的设计是,有一个主包为我们从源收集数据的每个表执行包。主包根据我们需要从中收集数据的源调用,如果在运行时有三个源,则主包的三个实例将运行。这些包在仓库机器上运行以从源系统中提取数据。
我们希望在仓库中维护这些包的一个版本,并支持从不同的源版本收集数据。
挑战
- 源系统上存储过程的签名在版本之间发生了变化
- 在较新的版本中,这些存储过程返回了一些附加字段
例子
7.3 版本签名:[dbo].[PDW_GetMediaAgentSummary](@LastVersionID 作为 BIGINT,@InitializeDays 作为 INT = 60,@NextVersionID 作为 BIGINT 输出)
7.3 Sp1 版本签名:[dbo].[PDW_GetMediaAgentSummary](@LastVersionID AS BIGINT, @DataStartDate AS DateTime2(3), @NextVersionID AS BIGINT OUTPUT)
另外,假设在 7.3 中这个存储过程返回了 8 个字段,而 7.3 sp1 它返回了 10 个字段。
我们试图适应的方式是使用 OLE DB 源中的“SQLCmd from variable”选项来覆盖签名差异,但该选项不允许我们将参数绑定到变量以获取输出值。第二个附加字段问题(或 7.3 过程中缺少附加字段),我们尝试关闭元数据验证,但是当我们针对 7.3 版本运行 SSIS 包时,在运行时出现 field not found 错误。看起来我们可以解决的唯一方法是根据源版本复制数据流任务。寻找更好的方法来做到这一点,因为随着发布数量的增加,这可能会失控。
感谢您对此的帮助