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

网友投稿 574 2022-11-11

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

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用户下,也可以查看到这两条新增的数据;

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Maven pom.xml文件获取当前时间戳方式
下一篇:python格式化输出(一):%s和format()用法比较
相关文章

 发表评论

暂时没有评论,来抢沙发吧~