历史版本13 :增量更新概述 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1、描述编辑

功能介绍:增量更新是指对表中新增加、新删除和新修改的数据进行更新,即将数据库中有变化的数据更新到引擎中存储,并保持以前的数据不变动。增量更新分为:增量增加、增量删除、增量修改,其中增量修改为通过增量增加与删除的组合来实现。增量更新只更新有变化的数据,因此其更新效率较全量更新有明显的提高。在BI中的增量更新均是在单表更新中实现的。其实现分为三步:

  • 第一步:用sql执行where语句 uptime>上次更新时间(也可以不用参数“上次更新时间”,可自定义一个),将数据库中更新的时间与上次更新的时间进行对比,当某条数据在数据库里的更新的时间大于上次更新的时间,便说明该数据是未更新的数据,将它们更新进来即可;

  • 第二步:读取到数据库中表的变化。表的变化分为:增加、删除、修改,通过sql语句首先识别到数据变化的行,再识别变化的类型是哪一种,从而确定属于哪一种增量更新。实现这一步,数据表要满足表中存在主键(唯 一标识)来标识表中的行,同时有字段记录变化的类型。例如对"用户表(A表)"进行增量更新,用户表的主键是UserID;通过对照表(B表)来记录用户表的变化,用ID和Uptype分别记录变化所在的行和类型(用add表示增加,del表示删除,upd表示修改)。此时执行sql语句,where A.ID=B.ID即可找到变化的行,Uptype="add"即找到增量增加的数据。

  • 第三步:将未更新的数据更新到引擎中,对于增量增加、增量删除及增量修改的操作在BI的单表更新中完成。在单表更新设置界面,选择“首次生成全量,此后增量更新”即进入到增量更新的设置界面。将相应的sql语句分别对应写到对应的增量类型的框中,后台自动执行sql语句,选择相应变化的所在的行执行增加、删除、修改三种操作。

适用场景:1)单表总数据量较大,比如百万以上的数据 ;

               2)表内有类似时间戳作用的字段,比如根据时间戳字段与更新时间的对比实现增量更新;

               3)表历史数据修改频率较低;

2、增量更新界面编辑

进入数据准备>业务包>数据表,点击更新信息,选择单表更新,如下图:

222

出现单表更新的界面,如下图,增量更新的方式包含了两种:增量增加和增量删除,单击可以点击切换增量更新的方式;包含了两个参数:上次更新时间与当前更新时间;下方的空框处用于填写执行增量更新的sql语句。

222

“上次更新时间”与“当前更新时间”均为对比参数,其使用方式是直接单击该参数名即可输入到设置框内,并使用函数将它们从字符串转化为时间类型。“上次更新时间”表示的是上一次更新开始的时间;“当前更新时间”是指本次更新的开始时间;通过两个时间点,将更新的数据圈定到从上次开始更新时到本次更新之间的新数据上,这样每次更新都会以上次的终点为起点进行更新,以保证数据的准确和完整。

注:“当前更新时间”这个参数并不需要强制使用,它是为了防止出现在更新的sql语句查询时,出现插入数据的情况,此时就不易判断该数据是否被更新;使用"当前更新时间"作为下限,可以将查询sql语句时的数据插入放到下次的更新中进行更新,不会出现遗漏或重复插入。如没有上述情况,使用“上次更新时间”即可。

注:增量更新是以行为单位的,增量增加是对引擎中保存的数据表直接添加行,增量删除是直接删除行。

3、增量增加编辑

增量增加在使用时一般包含两种情况:普通增量增加和时间戳增量增加。

3.1 普通增量增加

普通增量增加为将表中的所有数据增加到当前表,比如获取销售明细表的SQL:select * from new_salesdetail,表示将new_salesdetail表中所有数据全部增加到已有的表中。 例如数据库中有两个表A,B,其数据结构完全一致,比如2018-1-14查看,表A中存放的是历史全部数据(不包括2018-1-14的数据),而2018-1-14的所有数据都存放于表 B中。此时若需要在FineBI中使用所有数据,我们可以先将表A的数据全部添加到FineBI中,到了2018-1-15的时候,将表B的所有数据全量增加到FineBI分布式存储中。如下图:

222

点击预览,可查看该SQL执行的结果,如下图:

222

如果查询的列数与表中列数不符,会出现执行结果缺少字段的信息提示。因此执行SQL的查询列数与当前表中应一致。

3.2 时间戳增量增加

时间戳增量增加可使用参数,设置时间满足大于上次更新时间的数据进行更新。比如存在下面的销售明细表:销售单号(主键)、收费、销售时间、uptype;

222

而在2015/09/18日新增了部分销售数据的更新,更新的数据如下图:

222

则可将满足uptype=add且自带的时间(销售时间)大于上次更新时间即可,使用SQL如下图所示:

SELECT * from 销售明细表 a where a.uptype='add'and a.销售时间>str_to_date('上次更新时间','%Y-%m-%d %H:%i:%s')  

注:该示例str_to_date函数仅针对MySQL数据库,其他数据库需要使用对应函数转换时间格式。

需要选择上次更新时间的参数填入,如下图:

222

4、增量删除编辑

增量删除会根据查询出来的字段名与FineBI中存储的字段名自动匹配,根据查询出来的结果进行数据的删除。增量删除一般也包含两种情况:普通增量删除和时间戳增量删除。

注:只要是查询出来的字段名与Spider引擎存储中的字段名匹配,就会将这部分的数据进行删除。  

4.1 普通增量删除

输入的SQL比如:

select 1 as 店号 from new_salesdetail,表示将new_salesdetail表中店号为1的数据删除掉;

select 1 as 店号, 2 as 楼层 from new_salesdetail,表示将new_salesdetail表中店号为1以及楼层为2的数据删除掉;

select 店号 from new_salesdetail where 楼层 in (1,2,3),表示删除楼层是1,2,3的数据;

select 店号 from new_salesdetail where 楼层 in (1,2,3) and 店号 in (2,3,4),表示删除楼层是1,2,3以及店号是2,3,4的数据。

如下图:

222

4.2 时间戳增量删除

与增量增加类似,增量删除也可使用参数,设置时间满足大于上次更新时间的数据进行更新。比如将上次更新时间与本次更新时间之间查询出来的字段进行删除。

SELECT b.UserID from userModify b where b.uptype = 'del' andb.uptime>str_to_date('上次更新时间','%Y-%m-%d %H:%i:%s')  and b.uptime < str_to_date('当前更新时间','%Y-%m-%d %H:%i:%s')

注:该示例str_to_date函数仅针对MySQL数据库,其他数据库需要使用对应函数转换时间格式。

如下图:

222

5、增量修改编辑

Spider引擎中没有单表更新中的增量修改项,可以通过增量删除和增量增加进行功能组合来实现增量修改的场景。例如如下两种场景:

场景1:

每天的增量数据表A包含两部分:用户新录入的数据和用户修改过的历史数据。如果想将这种数据增量到引擎中,我们可以先删除表A数据,也就是将引擎中已保存的表A的数据全部删除。然后把表A的数据全部增加进入引擎中。即将增量数据全部作为新增数据重新写入引擎存储中。

场景2:

用户可能对历史数据进行增删改的操作,为了保证数据的准确性,我们可以对数据进行一个增量组合。比如用户修改了前三天的数据,我们可以删除前三天的数据,并增量增加前三天+今天的数据,这样可以不用关心用户具体做了什么增删改的操作,全部更新过来。

6、增量更新时间编辑

增量更新可以设置立即更新或者定时更新,其时间设置与定时更新中一致,可参考单表更新

6.1 定时增量更新

在配置好增量更新的方式以后,可以+定时设置添加定时任务,如下图:

222

在定时更新任务设置的时候更新方式下选择增量更新,如下图:

222

点击确定以后,该新增的任务即为定时增量更新的任务,如下图:

222

6.2 立即增量更新

同样在配置好增量更新方式以后,直接在单表更新界面单击立即更新,选择增量更新,即可立即进行增量更新。

222