跳到主要内容
版本:8.1.0

ETL 如何实现增量更新

背景

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

解决方案

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

ETL 整体分层设计

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

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

ETL 详细设计

DW- 样例表 (本月前)

-- 保证取的数据是本月之前的数据
SELECT * FROM  input1 WHERE  `创建时间`<  DATE_TRUNC('month',CURRENT_DATE())

DW- 样例表 (本月)

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

DM- 样例表 (本月前)

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

image.png

DM- 样例表

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

image.png

业务价值

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