在我们的spark应用程序中,我们每天运行多个批处理。这些批处理过程的来源不同,例如Oracle,mongoDB,文件。我们将根据源存储不同的增量处理值,例如某些oracle表的最新时间戳,某些oracle表的ID,某些文件系统的列表并将这些值用于下一次增量运行。
当前,这些偏移值的计算取决于源类型,每次添加新的源类型时,我们都需要自定义代码以存储该值。 是否有任何通用方法可以解决此问题,例如流式传输中的检查点。
答案 0 :(得分:0)
我总是喜欢查看最后写入的分区的目标,或者获取一些max(primary_key),然后根据该值从源数据库中选择要在当前运行期间写入的数据。
不需要存储任何东西,您只需要向批处理算法提供表名,源类型和主键/时间戳列即可。然后,该算法将找到您已经拥有的最新值。
这实际上取决于您的负载原理以及存储空间的划分方式。如果您有原始/源/准备好的图层。一个好主意是以原始格式加载数据,可以轻松地将其与原始源进行比较,以完成我上面所述的操作。
替代方法包括: