历史版本21 :增量增加示例 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

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 实现增量更新,如下图所示:

28.png

MySQL 的 SQL 语句如下所示:

SELECT * FROM demo_contract where 合同签约时间 > str_to_date('上次更新时间','%Y-%m-%d %H:%i:%s')

注:str_to_date 为 MySQL 数据库中将字符串转化为日期类型函数,若用户使用其他类型数据库,需要使用对应数据库适用的函数,其中「str_to_date」将系统中的参数「上次更新时间」转换成时间,用于和「合同签约时间」做比较。

参数说明如下所示:

参数说明

「上次更新时间」


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

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

    本示例使用 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')

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

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

    本示例使用 MySQL 函数「str_to_date」将其转化为日期类型;

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

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

2)点击预览可以查看到添加时间大于上次更新时间的数据,如下图所示:

1586341672520502.png

若是预览失败,可以将 SQL 语句中的「系统参数」替换为固定日期值,在自己的数据库中测试一下语句是否正确,然后再复制到 FineBI 中使用。

3)点击立即更新下拉框,选择增量更新,等待更新完成后,点击确定,更新成功,如下图所示:

1586341802630909.png

2.2 效果查看

1)在更新信息中可以看到更新结果,如下图所示:

1586342246773602.png

2)在数据预览界面即可看到增量更新的数据,如下图所示:

1586395503657014.png

3. 示例二编辑

对于第二种情况,可以同时设置 3 天的增量增加和 3 天的增量删除,FineBI 会自动先执行增量删除,再执行增量更新。

相比更新整张表而言,只改变近 3 天的数据可以大幅提升更新速度。

3.1 操作步骤

使用 MySQL 数据库下的demo_contract表,需要根据合同签约时间对其进行增量更新。

点击下载本例数据:DEMO_CONTRACT.xlsx

3.1.1 删除近 3 天的数据

1)进入业务包下,选择「demo_contract」表,选择「更新信息」,点击「单表更新」,进入设置框,增量更新方式选择「增量删除」,并且在增量更新输入框中使用 SQL 实现增量更新,如下图所示:

39.png

MySQL 的 SQL 语句如下所示:

SELECT * FROM demo_contract where DATE_SUB(CURDATE(), INTERVAL 4 DAY) <= date(合同签约时间)

注:SQL 中写的是 4 天,这是因为昨天的 3 天内是今天的 4 天前。

2)点击「预览」可以查看到添加时间大于上次更新时间的数据,如下图所示:

1586343517692105.png

3)点击「立即更新」下拉框,选择「增量更新」,等待更新完成后,点击「确定」,则删除了近 3 天的数据,如下图所示:

1586343719141806.png

3.1.2 更新近 3 天的数据

1)增量更新方式选择「增量增加」,并且在增量更新输入框中使用 SQL 实现增量更新,点击「预览」,如下图所示:

1586344670957667.png

MySQL 的 SQL 语句如下所示:

SELECT * FROM demo_contract where DATE_SUB(CURDATE(), INTERVAL 4 DAY) <= date(合同签约时间)

注:可以看到两个 SQL 是完全一致的,这是因为增加和删除都是近 3 天的内容。

2)点击「立即更新」下拉框,选择「增量更新」,等待更新完成后,点击「确定」,则新增了近 3 天的数据,如下图所示:

1586344815282184.png

注:也可以同时设置 3 天的增量增加和 3 天的增量删除,FineBI 会自动先执行增量删除,再执行增量更新。

3.2 效果查看

可以在「数据预览」界面查看到更新后的数据,如下图所示:

1586395923684385.png