ETL(十二):缓慢变化维(其中一种实现方式)

1、什么是缓慢变化维?

在这里插入图片描述

2、本文章使用的表是客户基本信息表department表,总共有743条数据,截取部分数据展示如下;

在这里插入图片描述

3、ETL开发流程如下

1)定义源表

在这里插入图片描述

2)定义目标表

① 利用源表创建目标表;
在这里插入图片描述
② 给目标表重命名;
在这里插入图片描述
③ 给目标表进行字段设置;
在这里插入图片描述
④ 生成并执行sql,在目标数据库中才会生成该目标表;
在这里插入图片描述
⑤ 去目标数据库edw用户下,查看该目标表;
在这里插入图片描述

3)创建映射

① 创建一个映射;
在这里插入图片描述
② 将源表和目标表都拖拉到右侧的灰色区域;
在这里插入图片描述
③ 添加一个“查找转换”组件,因为是要往目标表中插入数据,这里选择的的是“目标”;
在这里插入图片描述
④ 将源表的dept_id也移动到“查找转换”组件中;
在这里插入图片描述
⑤ 双击“查找转换”组件,设置查找匹配条件;
在这里插入图片描述
⑥ 设置目标表的连接对象。你使用“查找转换”组件去查找目标表,你总要知道目标表从哪里来吧?
在这里插入图片描述
⑦ 添加一个“路由器转换”组件,同时将“查找转换”组件中目标表的dept_id移动到“路由器转换”组件,同时将源表中的所有字段移动到“路由器转换”组件。
在这里插入图片描述
注意:添加一个“路由器转换”组件,是用于做条件分发,意思就是说:当我们在目标表中查到的dept_id为空,就将源表的数据插入到目标表中;当我们在目标表中查到的dept_id不为空,那么就做更新操作。因此,在这里可以看到dept_id是来自于目标表,其他字段都是来自于源表。

⑧ 双击“路由器转换”组件,设置分发规则;
在这里插入图片描述
在这里插入图片描述
⑨ 上述操作的效果如下;
在这里插入图片描述
⑩ 添加“更新策略转换组件”;
在这里插入图片描述
⑪ 双击“更新策略转换组件”,进行“插入”转换条件设置;
在这里插入图片描述
⑫ 将“路由器转换”组件中的insert组中的字段,传递给对应的“更新策略转换组件”;
在这里插入图片描述
⑬ 再添加“更新策略转换组件”;
在这里插入图片描述
⑭ 双击“更新策略转换组件”,进行“更新”转换条件设置;
在这里插入图片描述
⑮ 将“路由器转换”组件中的update组中的字段,传递给对应的“更新策略转换组件”;
在这里插入图片描述
⑯ 再拖动一个目标表到右侧灰色区域;
在这里插入图片描述
⑰ 此时可以看到:“更新策略转换”组件中没有ETL_DATE字段,因此我们需要借助于“表达式转换”组件,新增一个ETL_DATE字段,所以这一步添加两个“表达式转换”组件;
在这里插入图片描述
⑱ 分别将“更新策略转换组件”中的字段,移动到对应的“表达式转换组件”中;
在这里插入图片描述
⑲ 双击“表达式转换组件”,新增一个ETL_DATE字段;
在这里插入图片描述
在这里插入图片描述
⑳ 将“表达式转换组件”中的字段,流入到目标表中;
在这里插入图片描述
㉑ 使用CTRL + S保存创建的映射;
在这里插入图片描述
4)创建任务
① 创建一个任务;
在这里插入图片描述
② 选择该任务要执行的映射;
在这里插入图片描述
③ 设置源表的连接对象;
在这里插入图片描述
④ 设置目标表的连接对象;
在这里插入图片描述
设置另外目标表的连接对象(其实都是一张目标表);
在这里插入图片描述
⑤ 使用CTRL + S保存创建的任务;
在这里插入图片描述

5)创建工作流

① 创建一个工作流;
在这里插入图片描述
② 将任务拖动到右侧灰色区域,同时建立工作流与任务之间的连接;
在这里插入图片描述
③ 使用 CTRL + S保存创建的工作流;
在这里插入图片描述
④ 通过任务启动工作流;
在这里插入图片描述
⑤ 上述操作会自动打开M客户端,从图中可以看出,第一次进行ETL开发,目标表中是没有任何数据,因此直接是将源表中的743条记录,插入到目标表中;
在这里插入图片描述
⑥ 可以去edw用户中,验证一下目标表中的数据;
在这里插入图片描述

4、验证

1)验证update;

① 更新源表department中的部分数据;

UPDATE department SET dept_name = '海淀', full_name = '海淀', dept_no = 'haidian' WHERE dept_id = '0000000349';
UPDATE department SET dept_name = '丰台', full_name = '丰台', dept_no = 'fengtai' WHERE dept_id = '0000000350';
UPDATE department SET dept_name = '朝阳', full_name = '朝阳', dept_no = 'chaoyang' WHERE dept_id = '0000000351';
UPDATE department SET dept_name = '东城', full_name = '东城', dept_no = 'dongcheng' WHERE dept_id = '0000000352';
UPDATE department SET dept_name = '大兴', full_name = '大兴', dept_no = 'daxing' WHERE dept_id = '0000000353';
UPDATE department SET dept_name = '西城', full_name = '西城', dept_no = 'xicheng' WHERE dept_id = '0000000354';

② department表中的原始数据如下;
在这里插入图片描述
③ 修改后的department表中的数据如下;
在这里插入图片描述
④ 直接在M客户端中“重新启动”;
在这里插入图片描述
⑤ 效果如下图;
在这里插入图片描述
⑥ 去目标表中查看最终数据,可以发现数据已经更新;
在这里插入图片描述

2)验证insert;

① 给department源表中插入两条新的记录;

insert into DEPARTMENT (DEPT_ID, AREA_ID, LEVEL_NO, DEPT_NO, DEPT_NAME)
values ('0000006666', '0000000006', '666666', '666', '66社区');
insert into DEPARTMENT (DEPT_ID, AREA_ID, LEVEL_NO, DEPT_NO, DEPT_NAME)
values ('0000008888', '0000000008', '888888', '888', '88社区');

结果如下:
在这里插入图片描述
② 直接在M客户端中“重新启动”;
在这里插入图片描述
③ 效果如下,可以看到第三次开发,直接是对上次开发后的目标表进行操作,原始数据如果没有新增数据,直接走的是“更新操作”,原始数据新增的数据,直接走的是“插入操作”;
在这里插入图片描述
④ 此时,去edw用户下,也可以查看到这两条新增的数据;
在这里插入图片描述

发布了50 篇原创文章 · 获赞 64 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41261833/article/details/103691069