1. 概述
1.1 应用场景
若数据库中有一张表,每天都会新增数据。这时候用户可以使用「增量更新」,只将每天新增的数据更新到 FineBI 中。这样就不需要更新整张数据表,节省了更新时间和更新资源。
1.2 功能简介
满足以下条件的数据表,比较适合使用增量更新
表内有「时间戳」字段,可用来和「更新时间」做对比实现增量更新
历史数据不会变动
增量更新的表常用于频繁更新且数据量比较大的表。若是单表的数据量比较小,或者一个月才更新一回,那使用全量更新也没问题。
1.3 注意事项
2. 操作简介
选中要增量更新的表,在「更新信息」下找到「单表更新」,如下图所示:
进入到单表更新设置界面如下图所示:
可以看到有两种增量更新方式:增量增加、增量删除
2.1 增量增加
在下方写入 SQL 语句取数,「增量增加」会将从数据库中取出来的数据加到 FineBI 引擎中,如下图所示:
常用于需要定时新增数据的情况。详细操作可参见:增量增加示例
2.2 增量删除
在下方写入 SQL 语句,系统会从 FineBI 引擎中取出该部分数据进行删除,如下图所示:
用户可以通过「增量删除」删除 FineBI 引擎中不需要的数据。不过增量删除很少单独使用,通常情况下是用于修改数据,可参见本文 2.3 节。
2.3 增量修改
搭配使用「增量增加」和「增量删除」,比如说先删除 FineBI 中一部分数据后,再将数据库中的数据加入到 FineBI 引擎中。
详细操作可参见:增量修改示例
2.4 设置定时增量更新
FineBI 支持定时增量更新,详细操作可参见 增量增加示例 2.3 节。
3. 注意事项
3.1 增量更新重复执行导致数据重复
若用户增量更新时不小心重复更新,导致 FineBI 中数据重复怎么办?
这时候只需要执行一次全量更新,数据库的数据会重新覆盖 FineBI 引擎中的数据,从而保证 FineBI 引擎中的数据和数据库保持一致。
3.2 增量删除后磁盘空间不变化
用户在进行增量删除后,发现磁盘空间没有相应减少。
这是因为 FineBI 在进行增量删除后不会立即释放磁盘空间,而是先将数据标记为删除。
FineBI6.1环境下当标记删除的数据量达到 BI 总数据量的 10%, 就会一起删除释放磁盘空间。
如果想每次都真实删除数据,可以通过修改「finedb」的参数 「DistributedOptimizationConfig.spiderConfig.max_drop_row_ratio」进行配置,将取值范围为「0,1」,默认为 0.1 。
3.3 数据库与 BI 服务器的系统时间不一致
当FineBI服务器的系统时间与数据库的时间不一致时,容易出现重复更新的情况
建议在设置增量更新语句时,设置为「where 时间 > 上次更新时间 and 时间 <= 当前更新时间 」。