跳到主要内容
版本:5.9.0

ETL如何实现增量更新

背景

当前BI的Smart-ETL无法直接实现数据集的增量更新,每次ETL的运行就是全量的数据覆盖,当数据量越来越大的时候,每个ETL的性能就越来越差,系统整体运行的ETL时长也越来越长,如果能使用BI的Smart-ETL实现数据的增量更新问题就可以解决了。

解决方案

本方案历史数据是以月为周期、存量数据ETL每月2号晚上6点更新本月前所有数据。增量数据ETL每日凌晨更新当月数据,其中1、2号更新本月和上月数据、3号后只更新本月数据。

简易demo设计如下:

ETL整体分层设计

  1. DW层ETL分为DW-样例表(本月前)、DW-样例表(本月),因为DW层不被卡片使用所以可以不用做合并数据集。

   2、DM层ETL分为DM-样例表(本月前)、DM-样例表(注:这个ETL把增量DM和本月前DM数据集合并了)

image.png

ETL详细设计

1. DW-样例表(本月前)

-- 保证取的数据是本月之前的数据
SELECT * FROM __THIS__ WHERE  `创建时间`<  TRUNC(DATE_ADD(NOW(),-1) ,'MM')

image.png

2. DW-样例表(本月)

-- '-2'保证在1、2号的凌晨的时候上个月的数据还在增量数据集中、因为历史数据集是2号晚上才更新。
SELECT * FROM __THIS__ WHERE  `创建时间`>= TRUNC(DATE_ADD(NOW(),-2) ,'MM')

image.png

3. DM-样例表(本月前)

直接使用DW-样例表(本月前做为DW层数据集、生成对应DM)

image.png

4. DM-样例表

本月增量更新的DM和本月前的DM做行拼接合并成完整的DM数据集,可以被业务直接使用

image.png

业务价值

通过增量更新,ETL的性能对比全量更新性能提升3~5倍、存量数据量越大、ETL越复杂增量更新性能提升更多。如果以后BI对行拼接的性能有优化的化,性能可以得到进一步提升。