SSIS 将 ValidateExternalMetadata 设置为 false 是个好主意吗?

SSIS Is it a good idea to set ValidateExternalMetadata to false?

我有一个 SSIS 包,它使用 OLE DB 源和目标读取和写入 table。最近我们向 table 添加了两个新列。我的 SSIS 包不使用这些列,但现在我在打开包时收到“外部列与数据源不同步”警告。 我尝试 运行 包并成功完成,但我可以在执行结果中看到这些警告。我当然可以刷新元数据,但是有很多包 运行 正在生产中并使用这个 table,所以我认为刷新所有这些包并重新部署不是一个好主意。 .. 创建包时将 ValidateExternalMetadata 设置为 false 是否是个好主意,这样我以后就不会收到这些警告?还有其他建议吗?

ValidateExternalMetadata 设置为“您可以现在付款或稍后付款”

数据流必须确保其构建所依据的元数据在任务运行时保持真实。每当打开包进行编辑时,SSIS 设计器也会验证元数据。

如果参与者 (source/destination) 非常 complex/busy/latency-filled.

,则将默认设置从 True 更改为 False 可以在开发过程中节省您的周期

将此设置为 False 还可以缩短 SSIS 包的启动时间,因为任务只有在运行时才会被验证。假设您有一个 foreach 文件枚举器,它每季度只查找一个文件(但每天运行,因为会计不能完全告诉您他们什么时候准备好最终数字假设说话)。由于数据流任务只会在 365.25 天中的 4 天得到验证,可能 是有益的性能节省。可能不多,但如果你想获得每一点性能,这是一个你可以翻转的旋钮。

另一个编码格言是“警告只是等待长大的错误”。添加列不太可能导致错误,但由于元数据不匹配,您现在在每次包执行时花费 CPU 个周期来引发和处理 OnWarning 事件。如果您有一个操作团队,他们可能会对来自 SSIS 包的警告感到自满而错过更严重的警告。

将来避免这种情况的一种方法是在您的源代码中编写显式查询。目前,SELECT *(或底层 table 作为源)正在报告新的列,这是阻抗不匹配发挥作用的地方。如果您只引入您要求的列,添加列不会导致此警告浮出水面。

删除列当然会导致包失败(在显式或隐式列选择方法下)。