1. 概述

我们在建设数据仓库、数据集市的过程中,通常使用 ETL 工具把数据从“源库”抽取到“目标库”。“源库”中的历史数据,通常数据量特别大,比如有几千万甚至数亿条记录,而历史数据通常又不发生变化。在抽取数据的过程中,如果我们选择全量抽取,对于那些根本不会发生变化的历史数据,也抽取一遍,不仅没有任何意义,还要浪费大量的资源和时间。尤其是当有数亿条数据、并且需要进行复杂的数据加工时,很可能要耗费数小时,根本无法满足数据加工的时效性要求。因此,我们可以选择在进行 ETL 抽取的过程中,对数据进行 增量抽取,只抽取发生变化的部分。这样就可以让数据抽取的数据量变少,数据加工的时间变短,从而满足时效性要求。

2. 场景说明

我们在把数据从“源库”抽取到“目标库”的过程中,需要仔细分析要抽取的数据的变化情况。

下面我们要抽取的数据是这样一张表,“每日主流热销车销售数据”表,其中有一个“销售日期”字段,此表的数据每天更新,但只更新前一日数据,更早的历史数据不会发生变化。下面我们就以此表为例,介绍如果通过 Smartbi “自助ETL/作业流”完成数据的增量抽取。

3. 自助ETL中配置增量抽取

在自助ETL中,要进行数据的增量抽取,需要借助“参数”的帮助,并在数据的“输入”节点上配置数据过滤。详细过程说明如下。

3.1 定义抽取的参数

3.2 在输入节点上配置过滤条件

3.3 正常配置其他转换节点

3.4 数据输出节点配置

这里必须配置”回退SQL语句“的原因:

  • 我们的ETL很多时候通常会重复执行。比如执行过程中报错,我们修复错误后,需要重新执行。或者发现很早以前某天的历史数据错误,需要单独重跑这天的数据。
  • 因为我们选择的是”追加到关系表“节点,从前面节点来的数据都会追加到目标表中,如果某天数据抽取了两次,就会让目标表中数据重复、增多了。因此我们通过”回退SQL语句“,先把当前正抽取的这天的数据删除,然后再插入,就避免数据重复的可能性了。
  • 背后的执行过程是:先在目标表上执行 DELETE FROM `table_name` WHERE `销售日期` = ${抽取日期}  语句,然后再执行数据插入操作。 

4. 作业流中配置增量抽取

接下来我们需要让配置的ETL,每天定时自动运行,自动抽取前一日数据。详细过程说明如下。

4.1 定义系统公共参数


1. 概述

1. 概述

1. 概述

1. 概述




详情请参考:数据挖掘-参数设置