使用Flink批处理完成数据比较(对账)III

上一篇文章使用Flink批处理来完成数据比较(对账)。其次,讨论了使用Table API处理数据比较的问题。但是在某些场景下,会有一些复杂的业务需求,比如合并两边的数据进行输出。这个时候用表API完成这样的需求并不容易,需要底层数据集API和流程函数的帮助。

本文将使用DataSet API来满足数据比较的需要。至于流数据的实时对比,下篇文章会介绍。

核心思想是处理两个流中的数据(DataSet实际上是一个特殊的数据流),Flink就有这样一个API。

通过coGroup,where和equalTo,很容易说两个流中具有相同orderNo的数据是关联在一起的。coGroup不同于join,join只会把数据和同一个键联系起来,形成一个数据集。但是,当coGroup遇到只有一个指定键的数据集有记录的情况时,它会将这个组与一个空组相关联。

源代码

正如你所看到的,使用Flink来关联这两个数据是非常容易的。在实际业务场景中,作者在发回库存文件时,不仅需要关联两方的数据,还需要关联其他方的数据(如商户数据)。在这种情况下,目前想到的方法有: