场景:ETL沟通交流群内有小伙伴反馈,如何多个分支处理完毕之后记录下同步结果呢?或者是调用后续步骤、存储过程、三方接口等。
解决:使用步骤Blocking step进行阻塞处理即可。
1、 如下流程图中利用Blocking step步骤同时阻塞【模拟表输出1】和【模拟表输出2】两个步骤,只有当两个步骤都执行完毕之后数据才会通过Blocking step.
![](https://img2024.cnblogs.com/blog/412121/202406/412121-20240610101954429-1233204235.png)
- 表输出步骤加载数据,sql为select * from t1,t1表中有三条数据。
![](https://img2024.cnblogs.com/blog/412121/202406/412121-20240608123341497-975691224.png)
2)当前数据步骤为写日志步骤,打印数据读取记录。
3)延迟2秒和延迟3秒步骤可以暂停步骤立刻执行,添加为了演示执行顺序效果。
4)模拟表输出1和模拟表输出2实际上是写日志步骤,为了模拟表输出步骤,方便演示。
5)将模拟表输出1和模拟表输出2同时连接Blocking step步骤,之后打印日志记录最后一行数据。
注意:这里的最后一行数据不是表输入步骤中的最后一行数据,而是通过模拟表输出1和模拟表输出2两个步骤中的最后一条数据。
6)当前数据步骤使用的数据发送是Round-Robin轮询调度。
![](https://img2024.cnblogs.com/blog/412121/202406/412121-20240610101240613-1493740710.png)
7)下面为执行的视频,需公众号查看。
2、上边的案例是采用Round-Robin轮询调度,下面我们调整数据发送为数据复制方式,该方式可以将当前数据的数据复制两份,每份的数据都是一样的。
这种情况适用于从A表读取数据,同时写入B表和C表,这种情况下Blocking step步骤依然有效。
![](https://img2024.cnblogs.com/blog/412121/202406/412121-20240610103018642-896313498.png)