1. 概述编辑
1.1 版本
FineBI 版本 |
---|
5.1 |
1.2 问题描述
用户有时需要对部分数据进行更新,比如某张表只增不减,每天只需要更新增加的部分即可。
1.3 解决思路
使用增量更新。增量更新的逻辑是在被抽取的数据里增加或删除被写的 SQL 选中的部分。通常使用增量更新有两种情况:
1)某张表只增不减,每天只需要更新增加的部分即可。
2)某张表会增会减,但是修改范围一般在一段时间之内,如只会对一张表中近 3 天的内容进行删改。
2. 示例一编辑
对于第一种情况 ,逻辑是只更新添加时间大于上次更新时间的数据即可。
以下均 MySQL 数据库举例
点击下载本例数据:DEMO_CONTRACT.xlsx
2.1 操作步骤
使用 MySQL 数据库下的「demo_contract」表,需要根据「合同签约时间」对其进行增量更新。
1)进入业务包下,选择「demo_contract」表,选择「更新信息」,点击「单表更新」,进入设置框,增量更新方式选择「增量增加」,并且在增量更新输入框中使用 SQL 实现增量更新,如下图所示:
MySQL 的 SQL 语句如下所示:
SELECT * FROM demo_contract where 合同签约时间 > str_to_date('上次更新时间','%Y-%m-%d %H:%i:%s')
注:str_to_date 为 MySQL 数据库中将字符串转化为日期类型函数,若用户使用其他类型数据库,需要使用对应数据库适用的函数,其中「str_to_date」将系统中的参数「上次更新时间」转换成时间,用于和「合同签约时间」做比较。
参数说明如下所示:
参数 | 说明 |
---|---|
「上次更新时间」 | 表示上一次更新开始的时间; 「上次更新时间」必须用参数点击添加,不能复制添加 ;或者使用参数「${_last_update_time_}」代替系统参数「上次更新时间」,「${_current_update_time_}」代替系统参数「当前更新时间」,SQL 语句示例如下所示:SELECT * FROM demo_contract where 合同签约时间 > str_to_date('${_last_update_time_}','%Y-%m-%d %H:%i:%s') |
「当前更新时间」 | 表示本次更新的开始时间; |
「上次更新时间」与「当前更新时间」均为对比参数 | 使用方式是直接单击该参数名即可输入到设置框内,并使用函数将它们从字符串转化为时间类型; 通过两个时间点,将更新的数据圈定到从「上次开始更新」时到「本次更新」之间的新数据上,这样每次更新都会以上次的终点为起点进行更新,以保证数据的准确和完整。 |
注:「增量更新」是以行为单位的,增量增加是对引擎中保存的数据表直接添加行,「增量删除」是直接删除行。
2)点击预览可以查看到添加时间大于上次更新时间的数据,如下图所示:
若是预览失败,可以将 SQL 语句中的「系统参数」替换为固定日期值,在自己的数据库中测试一下语句是否正确,然后再复制到 FineBI 中使用。
3)点击立即更新下拉框,选择增量更新,等待更新完成后,点击确定,更新成功,如下图所示:
2.2 效果查看
1)在更新信息中可以看到更新结果,如下图所示:
2)在数据预览界面即可看到增量更新的数据,如下图所示:
3. 示例二编辑
对于第二种情况,可以同时设置 3 天的增量增加和 3 天的增量删除,FineBI 会自动先执行增量删除,再执行增量更新。
相比更新整张表而言,只改变近 3 天的数据可以大幅提升更新速度。
3.1 操作步骤
使用 MySQL 数据库下的demo_contract表,需要根据合同签约时间对其进行增量更新。
点击下载本例数据:DEMO_CONTRACT.xlsx
3.1.1 删除近 3 天的数据
1)进入业务包下,选择「demo_contract」表,选择「更新信息」,点击「单表更新」,进入设置框,增量更新方式选择「增量删除」,并且在增量更新输入框中使用 SQL 实现增量更新,如下图所示:
MySQL 的 SQL 语句如下所示:
SELECT * FROM demo_contract where DATE_SUB(CURDATE(), INTERVAL 4 DAY) <= date(合同签约时间)
注:SQL 中写的是 4 天,这是因为昨天的 3 天内是今天的 4 天前。
2)点击「预览」可以查看到添加时间大于上次更新时间的数据,如下图所示:
3)点击「立即更新」下拉框,选择「增量更新」,等待更新完成后,点击「确定」,则删除了近 3 天的数据,如下图所示:
3.1.2 更新近 3 天的数据
1)增量更新方式选择「增量增加」,并且在增量更新输入框中使用 SQL 实现增量更新,点击「预览」,如下图所示:
MySQL 的 SQL 语句如下所示:
SELECT * FROM demo_contract where DATE_SUB(CURDATE(), INTERVAL 4 DAY) <= date(合同签约时间)
注:可以看到两个 SQL 是完全一致的,这是因为增加和删除都是近 3 天的内容。
2)点击「立即更新」下拉框,选择「增量更新」,等待更新完成后,点击「确定」,则新增了近 3 天的数据,如下图所示:
注:也可以同时设置 3 天的增量增加和 3 天的增量删除,FineBI 会自动先执行增量删除,再执行增量更新。
3.2 效果查看
可以在「数据预览」界面查看到更新后的数据,如下图所示: