全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

增量抽取的重跑机制

最近更新时间:2021-03-02 20:03:30

抽取是将用户建立的模型的数据从源库转移到AxisBI的高性能MPP内,形式上分为全量覆盖抽取,全量追加抽取和增量抽取。

全量覆盖:每次会删除前一个副本,只保留一个副本,并且每次抽取都是全量的

全量追加:不会删除副本,保留所有副本,每次抽取都是全量的

增量抽取:每次抽取都是增量的,需要一个增量键作为增量的标志

————————————————————————————————

这次我们主要来说一下增量抽取的重跑机制:

功能路径:项目中心–>抽取管理–>对应增量抽取–>更多–>重跑

image.png

image.png

可以看到,重跑分为两种,一种是任务时间,一种是数据范围。为了方便解释,我们设定一种增量抽取场景,我们抽取一张表T,增量键为每天都不一样的DAY字段。今天是2019.3.22,我们发现2019.3.20的数据有了更新,我们需要更新这部分数据,因此需要用到我们的重跑功能,也就是将2019.3.20日的数据重新从数据库抽取到mpp。使用数据范围和任务时间的原理略有不同,用伪代码解释一下。


数据范围:

①删除MPP内的老数据,delete from MPP.T where day between

“2019/03/20 00:00:00” and “2019/03/20 24:00:00” 。

②从源库查找数据,select * from 源库.T where day between “2019/03/20 00:00:00” and “2019/03/20 24:00:00”

③将查询所得数据插回mpp,即完成数据的重跑更新。

这个过程的关键是利用了增量键【day】直接来判断数据的范围。因此,重跑若要成功,需要保证第②步的时候能够成功的查询到数据。


任务时间:顾名思义,也就是任务执行的时间,实际上mpp将数据抽取入库的时候会为数据打上一个时间戳,也就是任务时间time。如果我们选择了任务时间,mpp的动作不变,但是区别在于把增量键的条件改成了time的条件,伪代码如下

①查询MPP库 ,得到数据的边界 select min(day),max(day) from MPP.T where time between “2019/03/20 00:00:00” and “2019/03/20 24:00:00”

②做一个删除的动作 ,delete from MPP.T where time between “2019/03/20 00:00:00” and “2019/03/20 24:00:00”

③查询源库,select * from 源库.T where day between min(day) and max(day)

④将查询所得的数据插回mpp

这种场景适合用于一天内做了多次增量抽取的情况


这里再介绍一种特殊情况,增量抽取抽的不是一张表而是一条SQL的时候,该如何分析是否可以重跑呢?很简单,把上面所述的{T}表,用你的SQL代替即可,一条自定义SQL实际上是一个视图,视图也可以当成表来看待。

比如,我的SQL写的是 (select SYSDATE AS DAY, * from T ),然后设置day作为增量键,也就是总是以当前时间作为增量。那么这种情况重跑会如何?

答案:很遗憾,这种写法重跑是跑不到数据的,我们可以分析一下

①mpp删除数据

delete from MPP.(select SYSDATE AS DAY, * from T) a where a.day between

“2019/03/20 00:00:00” and “2019/03/20 24:00:00”

这一步删除了0条数据,因为 day总是等于当前时间,但是执行上是不会报错的,因此系统会继续执行第二步。

②从源库查找数据,select * from 源库.(select SYSDATE AS DAY, * from T) a where a.day between “2019/03/20 00:00:00” and “2019/03/20 24:00:00”

这一步,检索到0条数据,但是执行上是不会报错的,因此系统会继续执行第三步。

③将查询所得的数据插回mpp

通过分析可以发现,实际上这个重跑相当于啥也没做。

文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈