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

目录:

1. 概述编辑

1.1 应用场景

若昨天用户已经做了「全量更新」,现在只想增加今天一天的数据到数据库,这种情况下用户就可以使用「增量更新」功能。

什么样的表适合使用增量更新:

当单表同时满足以下三种情况时

  • 表内有「时间戳」字段,可用来和「更新时间」做对比实现增量更新

  • 单表数据量大

  • 历史数据不会变动

增量更新的表常用于频繁更新且数据量比较大的表。若是单表的数据量比较小,或者一个月才更新一回,那使用全量更新也没问题。

1.2 功能简介

若数据库昨天已经做了全量更新,现在只想增加今天一天的数据到数据库,这种情况下用户就可以使用增量更新功能。适合使用增量更新进行更新的数据有以下特征:

增量更新是指对表中新增加、新删除和新修改的数据进行更新,即将数据库中有变化的数据更新到引擎中存储,并保持以前的数据不变动。分类如下所示:

1591791056816665.png

增量更新只更新有变化的数据,因此其更新效率较全量更新有明显的提高。在BI中的增量更新均是在 单表更新 中实现的。实现步骤如下所示:

步骤内容
1. 对比更新时间用 SQL执行 where 语句uptime >上次更新时间(也可以不用参数“上次更新时间”,可自定义一个),将数据库中更新的时间与上次更新的时间进行对比,当某条数据在数据库里的更新的时间大于上次更新的时间,便说明该数据是未更新的数据
2. 读取到数据库中表的变化表的变化分为:增加、删除、修改,通过 SQL 语句首先识别到数据变化的行,再识别变化的类型是哪一种,从而确定属于哪一种增量更新
3. 更新数据将未更新的数据更新到引擎中,对于增量增加、增量删除及增量修改的操作在 BI 的 单表更新 中完成

1.3 注意事项

  • 不支持增量更新的表:服务器数据集、做了行列转换、自循环列的基础表、Excel数据集、自助数据集。

  • 数据库表和 SQL 数据集必须被 全量更新 过才可以做增量更新,且增量语句不可都为空。

  • 全量更新为将数据库中所有数据覆盖至 BI 数据表中,增量更新更新数据则取决于 SQL 语句。

注1:自助数据集的更新可以参考 更新自助数据集 ,且实现的是全量更新。

注2:Excel 数据集不能增量更新,只能追加上传,详情请参见 追加上传

2. 增量增加编辑

增量增加即从用户数据库中查询到一部分数据,然后将这部分数据增加到 BI 引擎中,如下图所示:

22.png

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

2.1 普通增量增加

1)进入数据准备>零售行业>销售明细,点击更新信息,选择单表更新,如下图所示:

23.png

2)普通增量增加为将表中的所有数据增加到当前表。

比如选择增量增加,输入获取销售明细表的 SQL :select * from new_salesdetail,表示将new_salesdetail表中所有数据全部增加到已有的表中。 如下图所示:

1591783666523444.png

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

1591783761447603.png

注1:示例 SQL 会将数据库数据全量增加至数据表中,而若为全量更新,则会将数据库数据覆盖在 BI 中。

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

2.1.1 立即增量更新

预览 SQL 无误后,点击可选择立即更新>增量更新,点击确定,则会将数据库中new_saledetail 数据表都增量更新至对应数据表下,如下图所示:

1591789826640293.png

2.1.2 定时增量更新

点击可选择定时设置,更新方式选择增量更新,等待更新成功后,点击确定,则会将数据库中new_saledetail 数据表都增量更新至对应数据表下,如下图所示:

487.png

2.2 时间戳增量增加

时间戳增量增加可使用参数,设置时间满足大于上次更新时间的数据进行更新。详情请参见:增量更新简单示例 

2.2.1 时间戳参数说明

增量更新参数包括上次更新时间当前更新时间,如下图所示:

1591786909131065.png

参数说明

「上次更新时间」


  • 表示上一次更新开始的时间;

  • 该参数为文本类型的年月日时分秒(例如:2017-12-22 12:00:00),需要通过函数将其转化为时间类型,才能与其他时间类型的字段做对比。

  • 「上次更新时间」必须用参数点击添加,不能复制添加 ;

「当前更新时间」
  • 表示本次更新的开始时间;

  • 该参数为文本类型的年月日时分秒(例如:2019-12-22 12:00:00),需要通过函数将其转化为时间类型,才能与其他时间类型的字段做对比;

  • 「上次更新时间」必须用参数点击添加,不能复制添加 。

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

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

3. 增量删除编辑

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

23.png

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

3.1 普通增量删除

此时增量删除选项就好像一个删除按钮,只需输入查询语句找到需要删除的部分数据即可。

1)进入「数据准备>零售行业>销售明细」,点击「更新信息>单表更新」,如下图所示:

23.png

2)例如选择「增量删除」,输入 SQL 

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

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 的数据。

注:增量删除的 SQL 语句中,select 后接单个字段,即只有一个基准列。不要写成【 select * from new_salesdetail where 楼层 in (1,2,3) 】,也不要写成 【select 店号,楼层 from new_salesdetail where 楼层 in (1,2,3) 】,否则可能导致删除数据不准确。

如下图所示:

14.png

3)点击「预览」可看到查找到需要删除的部分,如下图所示:

15.png

3.1.1 立即增量更新

预览 SQL 无误后,点击可选择「立即更新>增量更新」,等待更新成功后,点击「确定」,则会在数据表中删除预览的内容,如下图所示:

16.png

3.1.2 定时增量删除

如果用户要定时增量删除,点击「定时设置」,更新方式选择「增量更新」,并设置开始时间、执行频率等。

17.png

3.2 时间戳增量删除

增量删除也可使用参数,设置时间满足大于上次更新时间的数据进行更新。比如将上次更新时间与本次更新时间之间查询出来的字段进行删除。详情请参见: 增量更新简单示例 

4. 增量修改编辑

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

注:当用户同时写入了增量增加和增量删除语句时,会先执行增量删除语句,再执行增量增加语句。

4.1 场景

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

详情参见:增量更新简单示例

5. 注意事项编辑

5.1 增量更新时间参数

5.1.1 未设置时间参数

若在使用增量更新时,未使用参数上次更新时间本次更新时间,则在第一次进行着增量增加操作后在进行一次增量增加,那么数据会再次进行增加,而不是覆盖。

例如选择增量增加,添加 SQL :SELECT * FROM DEMO_CONTRACT where DATE_SUB(CURDATE(), INTERVAL 4 DAY) <= date(合同签约时间),增加最近3天的数据,如下图所示:

443.png

则在增量更新后,已经显示增加一条近 3 天的数据。

再进行一次同样的增量更新操作,此时数据表中会再次增量增加一遍之前增加的数据,而不是进行覆盖。

5.1.2 设置时间参数

若设置了时间参数,第一次进行着增量增加操作后在进行一次增量增加,是否数据再次进行增加取决于增量更新 SQL 的写法。

5.2 增量更新重复执行导致数据重复

5.2.1 问题现象

用户重复执行多次增量更新,导致数据重复,重复原因见本文 5.1 节内容。

例如更新两次导致数据重复,如下图所示:

10.png

5.2.2 解决方案

  • 对数据表进行全量更新,重新将数据库中数据更新至 BI ,如下图所示:

1595406870423848.png

  • 或者使用增量删除语句将多余数据删除。

结果如下所示:

87.png

5.3 增量删除后磁盘空间不变化

用户在进行增量删除后,发现磁盘空间没有相应减少。这是因为 FineBI 在进行增量删除后不会立即释放磁盘空间,而是先将数据标记为删除。当标记删除的数据量达到一定数量时, 就会一起删除释放磁盘空间。