一、前言
一直以来公司都有个痛点亟待解决。分库分表的MongoDB上传数据至ODPS,于是就有了一套利用tunnel java sdk上传数据的服务。但是上传完数据后DataWorks上的任务链依赖如何开始传递,一直没有解决。
老办法是打时间差,按照一般上传耗时3个小时计算,所有任务的起点都配置在凌晨4点开始,这在大多数时候都能生效,但在一些流量特别大的日子就会异常,数据没传完,但任务已经开始执行了,导致执行的结果都是错的。
所以,需要有个任务能够嗅探数据已经传输完毕,后续的任务都依赖这个嗅探任务。
二、解决方案
首先,新增一张表用作监控。
CREATE TABLE `one_day_monitor` (
`flag` BIGINT
)
PARTITIONED BY (
pt STRING COMMENT 'yyyymmdd'
)
LIFECYCLE 37000;
在正常传输完整数据后,在这张监控表里写一条记录,令当天分区的flag = 1
。之后的操作就围绕这个1
来进行。
终于来到标题内容,创建一个PyODPS节点,过程不赘述了。
先贴代码:
import time
t = o.get_table('one_day_monitor',project=