(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑

增量抽取,无疑可以提高数仓的数据抽取效率和节省存储空间。

一、源数据有“更新时间”字段

源数据,有更新字段时(last_update),增量抽取的步骤:
(流程概览)
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第1张图片
步骤二:细节–从"从步骤插入数据"选项获取上个步骤的结果集作为参数
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第2张图片

二、源数据无“更新时间”字段

好,到主题了。源数据,有”更新时间“,抽起来真舒服,可现实的业务场景,源系统给我们的源表呢,是多张表拼凑起来的视图,然后源系统的开发人员,不知道是耿直,还是偷懒,就不给源数据增加”last_update",估计他每次上报的数据,都是全量更新过来的吧。
广汽大圣这边接收的是广汽集团好几百家子公司的数据,我不可能学他们,每次都全量抽取吧。那源系统没有“更新时间”字段,如何作增量抽取呢?
(流程概览)
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第3张图片

步骤1:【输入】插件,关键字段进行排序

步骤1.1 和 步骤1.2 的脚本是一样,只是表来自不同的数据库,前者是源数据库,后者是目标数据库,然后将“关键字段”进行排序,这两张表的“关键字段”是‘ID’。
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第4张图片
关键字段,你可以理解为是这条数据的“唯一标识”,一般是这张表的“唯一主键”,主键的特性是不重复,主键确保了这条数据在整张表中是唯一的,不重复的。从业务的角度思考:一个人只有一条工作经历吗?如果同一张表,一个人有多条数据,我们不难判断:这张表是没有主键的,仅用‘ID’字段去匹配比对是不对的。下面先把正常流程演示一遍,后面再给大家填坑。

步骤2:【合并记录】插件

(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第5张图片

步骤3:【过滤记录】插件

用该插件进行过滤,筛选条件为:flagfield<>indetical
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第6张图片

步骤4:【获取系统信息】插件,给新增数据增加一个last_update

(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第7张图片

步骤5:【输出】插件,给ods层【目标表】插入源系统最新的业务数据


如果数据规整(没有重复数据,字段没有空值,没有空格,两个数据库的字符集用的都是一样的–从源数据库抽到目标数据库,没出乱码),ID是主键的话,以上操作,绝对没问题。
现实的业务场景呢,偏偏就是数据不规整,没有主键。
所以为了避免万无一失,要在“步骤1 和 步骤2”进行以下处理:
1、源数据去重
2、空值/空格替换
3、给该行数据造一个“唯一标识”–多个关键字段组合,确保这几个关键字段是该行数据独有的。如:
在这里插入图片描述
仅用’ID’不能确保‘ID’是该行数据的“唯一标识”。那"ID"+“company”,那就可以确保这两个字段是该行数据的“唯一标识”了。
(流程概览)
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第8张图片
步骤1.1:源数据进行去重、关键字段进行空值/空格替换、关键字段排序
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第9张图片
步骤1.2:目标表,关键字段进行排序
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第10张图片
步骤1.3:【替换NULL值】插件,批量填充字段中的空值/空格
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第11张图片
步骤2:【合并记录】插件
(一)ODS层更新:如果源数据没有“更新时间“字段,如何作增量抽取?我都踩过这些坑_第12张图片
好了,按着以上步骤进行操作,就可以进行增量抽取了。还有一个坑:两个数据库的字符集导致的某些字段乱码问题,大家可以自行搜一下看看其他大佬是怎么解决的。

你可能感兴趣的:(数据仓库)