ADF Custom Sink Ordering 能否用于先加载父记录,然后再加载子记录?

Can ADF Custom Sink Ordering be use to load parent records first and then child?

更新:微软已经发现问题并将修复它!

我正在尝试使用 Azure 数据工厂在 Azure SQL 中加载父子 table,这是通过外键在数据库中强制执行的。

我的 DataFlow 非常简单,从分段 tables 读取并一对一写入目标 tables。其中一个读取具有针对第三个读取的存在约束 table 以确保仅加载正确的记录子集。

我有两个非常相似的数据流加载两种具有相似父子关系的记录,其中一种工作正常,另一个因外键违规而失败。有时。它不一致,更改看似无关的东西(例如刷新数据集架构)有时会使其起作用。

两个数据流都设置了自定义接收器排序,使父 table 插入首先发生在顺序 1,子记录发生在顺序 2。

我是否正确使用了此功能,这是 Custom Sink Ordering 应该给我的东西吗?

这是作业布局,它实际上正在加载两个子 table:

我尝试移除顶部接收器,因此它仅加载因外键违规而失败的写入顺序 1 table (sinkSSUSpatialUnit) 和写入顺序 2 table (sinkSSUCompartment),并且该问题不会发生在 DataFlow 的缩减克隆中。

Microsoft 发现自定义接收器顺序间歇性无法按预期工作的问题,并将修复该问题。如果我发现更多,我会更新这个。

在文档中,MS 没有说明源的顺序:https://docs.microsoft.com/en-us/azure/data-factory/data-flow-sink#custom-sink-ordering

也许你可以尝试对源使用读取提交隔离级别,以查看 ADF 是否决定在读取源数据集之前等待接收器。

Microsoft 支持人员表示,如果您的父 table 的写入顺序为 1,而两个子 table 的写入顺序为 2,那么它可能会出错。

答案是将其中一个子table设置为Write Order 3,这样就不会有歧义了。