1. 概述编辑
1.1 应用场景
若昨天用户已经做了「全量更新」,现在只想增加今天一天的数据到数据库,这种情况下用户就可以使用「增量更新」功能。
什么样的表适合使用增量更新:
当单表同时满足以下三种情况时
表内有「时间戳」字段,可用来和「更新时间」做对比实现增量更新
单表数据量大
历史数据不会变动
增量更新的表常用于频繁更新且数据量比较大的表。若是单表的数据量比较小,或者一个月才更新一回,那使用全量更新也没问题。
1.2 功能简介
若数据库昨天已经做了全量更新,现在只想增加今天一天的数据到数据库,这种情况下用户就可以使用增量更新功能。适合使用增量更新进行更新的数据有以下特征:
增量更新是指对表中新增加、新删除和新修改的数据进行更新,即将数据库中有变化的数据更新到引擎中存储,并保持以前的数据不变动。分类如下所示:
增量更新只更新有变化的数据,因此其更新效率较全量更新有明显的提高。在BI中的增量更新均是在 单表更新 中实现的。实现步骤如下所示:
步骤 | 内容 |
---|---|
1. 对比更新时间 | 用 SQL执行 where 语句uptime >上次更新时间(也可以不用参数“上次更新时间”,可自定义一个),将数据库中更新的时间与上次更新的时间进行对比,当某条数据在数据库里的更新的时间大于上次更新的时间,便说明该数据是未更新的数据 |
2. 读取到数据库中表的变化 | 表的变化分为:增加、删除、修改,通过 SQL 语句首先识别到数据变化的行,再识别变化的类型是哪一种,从而确定属于哪一种增量更新 |
3. 更新数据 | 将未更新的数据更新到引擎中,对于增量增加、增量删除及增量修改的操作在 BI 的 单表更新 中完成 |
1.3 注意事项
不支持增量更新的表:服务器数据集、做了行列转换、自循环列的基础表、Excel数据集、自助数据集。
数据库表和 SQL 数据集必须被 全量更新 过才可以做增量更新,且增量语句不可都为空。
全量更新为将数据库中所有数据覆盖至 BI 数据表中,增量更新更新数据则取决于 SQL 语句。
注1:自助数据集的更新可以参考 更新自助数据集 ,且实现的是全量更新。
注2:Excel 数据集不能增量更新,只能追加上传,详情请参见 追加上传 。
2. 增量增加编辑
增量增加即从用户数据库中查询到一部分数据,然后将这部分数据增加到 BI 引擎中,如下图所示:
增量增加在使用时一般包含两种情况:「普通增量增加」和「时间戳增量增加」。
2.1 普通增量增加
1)进入数据准备>零售行业>销售明细,点击更新信息,选择单表更新,如下图所示:
2)普通增量增加为将表中的所有数据增加到当前表。
比如选择增量增加,输入获取销售明细表的 SQL :select * from new_salesdetail,表示将new_salesdetail表中所有数据全部增加到已有的表中。 如下图所示:
3)点击预览,可查看该 SQL 执行的结果,如下图所示:
注1:示例 SQL 会将数据库数据全量增加至数据表中,而若为全量更新,则会将数据库数据覆盖在 BI 中。
注2:如果查询的列数与表中列数不符,会出现执行结果缺少字段的信息提示。因此执行 SQL 的查询列数与当前表中应一致。
2.1.1 立即增量更新
预览 SQL 无误后,点击可选择立即更新>增量更新,点击确定,则会将数据库中new_saledetail 数据表都增量更新至对应数据表下,如下图所示:
2.1.2 定时增量更新
点击可选择定时设置,更新方式选择增量更新,等待更新成功后,点击确定,则会将数据库中new_saledetail 数据表都增量更新至对应数据表下,如下图所示:
2.2 时间戳增量增加
时间戳增量增加可使用参数,设置时间满足大于上次更新时间的数据进行更新。详情请参见:增量更新简单示例
2.2.1 时间戳参数说明
增量更新参数包括上次更新时间和当前更新时间,如下图所示:
参数 | 说明 |
---|---|
「上次更新时间」 |
|
「当前更新时间」 |
|
注1:「当前更新时间」这个参数并不需要强制使用,它是为了防止出现在更新的 SQL 语句查询时,出现插入数据的情况,此时就不易判断该数据是否被更新;使用「当前更新时间」作为下限,可以将查询 SQL 语句时的数据插入放到下次的更新中进行更新,不会出现遗漏或重复插入。如没有上述情况,使用「上次更新时间」即可。
注2:「增量更新」是以行为单位的,增量增加是对引擎中保存的数据表直接添加行,「增量删除」是直接删除行。
3. 增量删除编辑
增量删除会根据查询出来的字段名与 FineBI 引擎中存储的字段名自动匹配,根据查询出来的结果进行数据的删除。增量删除一般也包含两种情况:普通增量删除和时间戳增量删除。如下图所示:
注:只要是查询出来的字段名与 Spider 引擎存储中的字段名匹配,就会将这部分的数据进行删除。
3.1 普通增量删除
此时增量删除选项就好像一个删除按钮,只需输入查询语句找到需要删除的部分数据即可。
1)进入数据准备>零售行业>销售明细,点击更新信息,选择单表更新,如下图所示:
2)例如选择增量删除,输入 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 的数据。
如下图所示:
3)点击预览可看到查找到需要删除的部分,如下图所示:
3.1.1 立即增量更新
预览 SQL 无误后,点击可选择立即更新>增量更新,等待更新成功后,点击确定,则会在数据表中删除预览的内容,如下图所示:
3.1.2 定时增量更新
点击可选择定时设置,更新方式选择增量更新,等待更新成功后,点击确定,则会在数据表中删除预览的内容,如下图所示:
3.2 时间戳增量删除
增量删除也可使用参数,设置时间满足大于上次更新时间的数据进行更新。比如将上次更新时间与本次更新时间之间查询出来的字段进行删除。详情请参见: 增量更新简单示例
4. 增量修改编辑
Spider 引擎中没有单表更新中的增量修改项,可以通过增量删除和增量增加进行功能组合来实现增量修改的场景。
注:当用户同时写入了增量增加和增量删除语句时,会先执行增量删除语句,再执行增量增加语句。
4.1 场景一
1)例如每天的增量数据表new_salesdetail包含两部分:用户新录入的数据和用户修改过的历史数据。如果想将这种数据增量到引擎中,
可以先删除表new_salesdetail数据,也就是将引擎中已保存的表new_salesdetail的数据全部删除,选择增量删除,输入SQL :select * from new_salesdetail,点击可选择立即更新>增量更新,或者设置定时更新,等待更新成功后,点击确定,则会在数据表中删除预览的内容,如下图所示:
2)把表new_salesdetail的数据全部增加进入引擎中,即将增量数据全部作为新增数据重新写入引擎存储中,点击增量增加,输入SQL :select * from new_salesdetail,可选择立即更新>增量更新,或者设置定时更新,等待更新成功后,点击确定,则会在数据表中增加预览的内容,如下图所示:
4.2 场景二
例如用户可能对历史数据进行增删改的操作,为了保证数据的准确性,可以对数据进行一个增量组合。比如用户修改了前三天的数据,可以删除前三天的数据,并增量增加前三天+今天的数据,这样可以不用关心用户具体做了什么增删改的操作,全部更新过来。
详情参见:增量更新简单示例
5. 注意事项编辑
5.1 增量更新时间参数
5.1.1 未设置时间参数
若在使用增量更新时,未使用参数上次更新时间和本次更新时间,则在第一次进行着增量增加操作后在进行一次增量增加,那么数据会再次进行增加,而不是覆盖。
1)例如选择增量增加,添加 SQL :SELECT * FROM DEMO_CONTRACT where DATE_SUB(CURDATE(), INTERVAL 4 DAY) <= date(合同签约时间),增加最近3天的数据,如下图所示:
则在增量更新后,已经显示增加一条近 3 天的数据,如下图所示:
2)再进行一次同样的增量更新操作,此时数据表中会再次增量增加一遍之前增加的数据,而不是进行覆盖,如下图所示:
5.1.2 设置时间参数
若设置了时间参数,第一次进行着增量增加操作后在进行一次增量增加,是否数据再次进行增加取决于增量更新 SQL 的写法。
5.2 增量更新重复执行导致数据重复
5.2.1 问题现象
用户重复执行多次增量更新,导致数据重复,重复原因见本文 5.1 节内容。
例如更新两次导致数据重复,如下图所示:
5.2.2 解决方案
对数据表进行全量更新,重新将数据库中数据更新至 BI ,如下图所示:
或者使用增量删除语句将多余数据删除。
结果如下所示:
5.3 增量删除后磁盘空间不变化
用户在进行增量删除后,发现磁盘空间没有相应减少。这是因为 FineBI 在进行增量删除后不会立即释放磁盘空间,而是先将数据标记为删除。当标记删除的数据量达到一定数量时, 就会一起删除释放磁盘空间。