微前端架构如何改变企业的开发模式与效率提升
574
2022-11-11
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~