ETL(七):存储过程转换器和序列转换器的使用

1、需求

ETL(七):存储过程转换器和序列转换器的使用

2、创建一个存储过程

① 在scott用户中创建一个存储过程;

-- 创建一个存储过程,功能是根据输入的部门编号,返回部门人数;CREATE PROCEDURE get_deptno_count(p_deptno IN NUMBER,p_count OUT NUMBER)AS /***************************************************            功能:            逻辑:            开发人员:            开发日期:            源表:            目标表:     ***************************************************/BEGIN      SELECT COUNT(*) INTO p_count      FROM emp       WHERE deptno=p_deptno;END;

② 测试刚刚创建的存储过程;

-- 调用存储过程;DECLARE    aa NUMBER;BEGIN   get_deptno_count(30,aa);   dbms_output.put_line(aa);END;-- 返回的结果是6;

3、ETL开发流程

1)定义源表

ETL(七):存储过程转换器和序列转换器的使用
2)定义目标表

① 修改目标表表名,选择想要保留的字段;

ETL(七):存储过程转换器和序列转换器的使用

② 生成并执行sql,使得目标数据库中真正生成该表;

ETL(七):存储过程转换器和序列转换器的使用

③ 在edw用户下查看,已经生成了该表edw_emp_deptno_count;

ETL(七):存储过程转换器和序列转换器的使用
3)创建映射

① 创建一个映射;

ETL(七):存储过程转换器和序列转换器的使用

② 将源表和目标表都拖拉到右侧灰色区域;

ETL(七):存储过程转换器和序列转换器的使用

③ 在源表和目标表直接添加一个”序列生成器”,用于给最终数据生成一个行号;

ETL(七):存储过程转换器和序列转换器的使用

④ “序列生成器”的使用:直接将NEXTVAL给目标表的ID字段,那么目标表中id字段就会自动生成一个序列,默认是1,2,3…

ETL(七):存储过程转换器和序列转换器的使用

⑤ “序列生成器”中还需要注意的一个地方;

ETL(七):存储过程转换器和序列转换器的使用

⑥ 调用”存储过程转换”组件,点击P(X),再在任意空白区域单击一下,就会出现如下”导入存储过程”界面;

ETL(七):存储过程转换器和序列转换器的使用

⑦ 为存储过程设置连接数据库,表示你要调用的存储过程来自哪里,这里我们要调用的存储过程来自于Oracle中的Scott用户。

ETL(七):存储过程转换器和序列转换器的使用

⑧ 进行”连接”以后,选择你想要导入的存储过程;

ETL(七):存储过程转换器和序列转换器的使用

⑨ 导入存储过程后的”存储过程转换组件”界面如下;

ETL(七):存储过程转换器和序列转换器的使用

⑩ 双击”存储过程转换”组件界面,在”编辑转换”界面点击”端口”,可以查看如下界面展示给我们的有用信息;

ETL(七):存储过程转换器和序列转换器的使用

⑪ 双击”存储过程转换”组件,在”编辑转换”界面点击”属性”,进行存储过程连接对象的设置;

ETL(七):存储过程转换器和序列转换器的使用

⑫ 进行映射关系的,实线连接,下图中可以很清晰的看清楚目标表中的字段都是从哪张表流入的;

ETL(七):存储过程转换器和序列转换器的使用

注意:目标表中的deptno字段,不能来自于”存储过程转换”组件中的p_deptno字段,这是因为我们在定义存储过程的时候,已经将deptno字段定义为输入,表示该字段只有输入,没有输出。⑬ 使用CTRL + S保存映射;

ETL(七):存储过程转换器和序列转换器的使用
4)创建一个任务;

① 创建一个任务;

ETL(七):存储过程转换器和序列转换器的使用

② 选择该任务想要执行的映射;

ETL(七):存储过程转换器和序列转换器的使用

③ 设置源表的连接对象;

ETL(七):存储过程转换器和序列转换器的使用

④ 设置目标表的连接对象(这里的设置主要是为了说明目标表最终去向哪里!);

ETL(七):存储过程转换器和序列转换器的使用

⑤ 使用CTRL + S保存一下任务;

ETL(七):存储过程转换器和序列转换器的使用
5)创建一个工作流

① 创建一个工作流;

ETL(七):存储过程转换器和序列转换器的使用

② 进行工作流与任务之间的,实线连接;

ETL(七):存储过程转换器和序列转换器的使用

③ 使用CTRL + S保存一下该工作流;

ETL(七):存储过程转换器和序列转换器的使用

④ 启动工作流;

ETL(七):存储过程转换器和序列转换器的使用

⑤ 上述操作会自动打开M客户端,成功操作或者失败信息,都会在这个和客户端中显示出来,通过日志信息可以帮助我们找到自己究竟在哪里操作错误;

ETL(七):存储过程转换器和序列转换器的使用

⑥ 此时,可以去edw用户下,查看最终生成的数据;

ETL(七):存储过程转换器和序列转换器的使用

4、针对上述结果,进行去重显示,效果如下;

id   deptno   count1    10       32    20       53    30       6

注意:这个不需要我们重新进行开发,只需在原来的操作基础上,进行部分改动即可;

① 在源表和”存储过程转换器”组件中间,添加一个”汇总转换器”组件,用于对传入的deptno参数进行去重;

ETL(七):存储过程转换器和序列转换器的使用

② 双击”汇总转换器”组件,我们将deptno进行分组;

ETL(七):存储过程转换器和序列转换器的使用

③ 再次进行映射之间的,实线连接;

ETL(七):存储过程转换器和序列转换器的使用

④ 使用CRTL + S保存一下,修改后的映射;

ETL(七):存储过程转换器和序列转换器的使用

⑤ 重新通过任务启动工作流;

ETL(七):存储过程转换器和序列转换器的使用

⑥ 上述操作会自动打开M客户端,成功操作或者失败信息,都会在这个和客户端中显示出来,通过日志信息可以帮助我们找到自己究竟在哪里操作错误;

ETL(七):存储过程转换器和序列转换器的使用

⑦ 此时,再去edw用户下,查看最终生成的数据;

ETL(七):存储过程转换器和序列转换器的使用

5、上述结果还存在一个缺陷,就是ID字段不是从1开始计数的。

这样做的原因是,当我们第一次使用序列转换器时,起始值从1开始,并一直增加到14,因为1中有14条记录。当我们重新修改映射,但不重复使用“顺序转换器”时,重启任务后,默认情况下,“顺序转换器”的起始值将从15开始记录。

[En]

The reason for this is that when we first use a sequence converter, the starting value starts at 1 and increases all the way to 14, because there are 14 records in one. When we re-modify the mapping, but do not reuse the “sequence converter”, after restarting the task, the “sequence converter” start value will be recorded from 15 by default.

① 删除原来的”序列转换器”,重新新建一个;

ETL(七):存储过程转换器和序列转换器的使用

② 建立新的”序列转换器”;

ETL(七):存储过程转换器和序列转换器的使用

③ 点击CTRL + S保存一下修改后的映射;

ETL(七):存储过程转换器和序列转换器的使用

④ 重新通过任务启动工作流;

ETL(七):存储过程转换器和序列转换器的使用

⑤ 上述操作会自动打开M客户端,成功操作或者失败信息,都会在这个和客户端中显示出来,通过日志信息可以帮助我们找到自己究竟在哪里操作错误;

ETL(七):存储过程转换器和序列转换器的使用

⑥ 此时,去edw用户下,查看最终生成的数据;

ETL(七):存储过程转换器和序列转换器的使用

Original: https://blog.51cto.com/u_14346314/5537103
Author: 黄至尊qwe
Title: ETL(七):存储过程转换器和序列转换器的使用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/508497/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球