1 背景
若数据库中有一张表,每天都会新增数据,这时候用户可以使用 增量抽取,只将每天新增的数据更新到 Smartbi MPP 表,这样就不需要更新整张数据表,节省了更新时间和更新资源。
1、增量抽取只在数据模型引擎V2.0上生效。
2、目前增量抽取支持的缓存库:SmartbiMpp产品默认使用高速缓存库CH、StarRocks、SmartbiMppMD产品exe安装包自带高速缓存库,正在持续继续完善。
1.1 增量抽取适用场景
- 数据源中的表,每天都有数据更新,希望每天取到最新的数据。
数据库中某张表的近四天的数据重新校正过了,需要更改到 MPP 中;该表数据量很大,全量更新的时间很长,可以通过增量更新进行抽取。
1.2 概念介绍
增量抽取,提供了 “追加”、“更新与插入”2种方式:
1、追加:每次抽取,根据“用于标识新增数据的字段”判断数据库中的数据是否为新增数据,对数据库的新增数据进行抽取,并追加在MPP数据库中,如下图所示:
2、更新与插入:每次抽取,根据“用于判断数据在缓存库中是否存在的主键字段”逐行判断该行数据在缓存库中是否存在,如果不存在则插入,如果存在则更新,如下图所示:
2 示例介绍
数据模型共有9种查询,其中 导入文件、生成日期表、ETL高级查询 不支持增量抽取。
增量抽取是针对数据模型的单个表或查询进行设置的。
2.1 追加示例
以产品自带数据源northwind数据库下的“orderDetails”表,”produts“表进行为例进行说明。
1、创建数据模型并在数据模型加入"orderDetails"表、”produts“表,创建的模型如下:
2、由于”orderDetails“表的数据每天都会增加,在”orderDetails“表上设置增量抽取:
增量数据获取方式:
- 按字段筛选:当选中的是”数据源表“时,它才是启用状态,当选中的是其他查询是禁用状态。
- 当选中的是SQL查询、存储过程查询、java查询、可视化SQL查询、脚本查询,它是启用状态;当选中”数据源表“时,它才是禁用状态
当前”orderDetails“表是数据源表的类型,所以”增量数据获取方式“是”按字段筛选“,需要选择”用于标识新增数据的字段“:
- 代表的意思:假设“用于标识新增数据的字段”是 field,上一次抽取时 field 字段的最大值表示为 last_max(field),则本次抽取获取增量数据的过滤条件是 field > last_max(field)
- 只能选择整型、日期、日期时间类型的字段;
- 只能选择一个字段。
增量入库方式:支持追加、更新与插入;选择追加。
配置好之后,可以点击【立即抽取】、”全量覆盖抽取“:
选项 | 说明 |
---|---|
立即抽取 | 如果是第一次抽取,则会把整个模型都执行全量抽取,如果非第一次抽取,则会根据上一次抽取时UpdateTime字段的最大值为参数默认值进行抽取。 注意: 如果是维表进行增量更新,抽取时候会自动更新与它关联的事实表的小宽表,如果与它关联的事实表数据量很大,则抽取时间会相对久一些。 |
立即覆盖抽取 | 即全量抽取,如果其他表/查询没有更改过,只会抽取该表的数据;如果其他表/查询调整了结构也会把调整结构的表都抽取了。 |
2.2 更新与插入示例
以产品自带数据源northwind数据库下的“orders”表、“OrderDetail”为例来进行说明。
为了更好的说明增量抽取的原理,在"orders"源表中,增加一列“UpdateTime”,如下图:
具体的操作步骤如下:
1、创建数据模型并在数据模型加入"ordersDetail"表,以及通过SQL查询来筛选大于2024-01-01的“Orders”表信息,创建的模型如下:
2、在参数管理中,创建参数UpdateTime,并映射到“Orders”表:
3、由于"Orders"表的数据很大,并且经常会更新,抽取方式选择“增量抽取”:
增量数据获取方式:按字段筛选、按参数筛选:
选项 | 说明 |
---|---|
按字段筛选 | 当选中的是”数据源表“时,它才是启用状态,当选中的是其他查询是禁用状态。 |
按参数筛选 | |
用于标识新增数据的参数:
| |
与参数关联的字段: 只能选择数值型、日期、日期时间类型的字段。 |
由于刚已经映射了参数“UpdateTime”,所以“用于标识新增数据的参数” 选择“UpdateTime”、”与参数关联的字段“的选择“UpdateTime”字段, 如下图所示:
选项 | 说明 |
---|---|
用于判断数据在缓存库中是否存在的主键字段 |
|
立即抽取 | 如果是第一次抽取,则会把整个模型都执行全量抽取,如果非第一次抽取,则会根据上一次抽取时UpdateTime字段的最大值为参数默认值进行抽取。 注意: 如果是维表进行增量更新,抽取时候会自动更新与它关联的事实表的小宽表,如果与它关联的事实表数据量很大,则抽取时间会相对久一些。 |
立即覆盖抽取 | 即全量抽取,如果其他表/查询没有更改过,只会抽取该表的数据;如果其他表/查询调整了结构也会把调整结构的表都抽取了。 |
3、关于增量抽取,需要注意点:
- 其中“数据源表”的”增量获取方式“只支持“按字段筛选”,
1.2 功能简介
满足以下条件的数据表,比较适合使用增量更新
表内有「时间戳」字段,可用来和「更新时间」做对比实现增量更新
历史数据不会变动
增量更新的表常用于频繁更新且数据量比较大的表。若是单表的数据量比较小,或者一个月才更新一回,那使用全量更新也没问题。