大数据 爬虫Python AI Sql大数据,机器学习,人工智能程序员

Kettle 调用 greenplum 数据库的存储过程

2019-09-27  本文已影响0人  小飞牛_666

  第一次使用 kettle 以及 greenplum 数据库,特别是 greenplum 数据库网上资料特别稀缺,遇到问题都不知道去哪儿查找,今天总结下遇到过的问题。
  今天主题是:如何使用 kettle 调用 greenplum 编写的存储过程。

一、创建一个简单的学生表,用来给存储过程做简单的数据插入
--创建表
create table student(
    sid NUMERIC,
    sname varchar(20),
    sdate varchar(8)
);

二、创建操作学生表的存储过程
--创建存储过程
create or replace function My_LALIAN_PRO(IN S_ID NUMERIC, IN S_NAME VARCHAR, IN S_DATE VARCHAR)
    returns void 
as $$ 
begin
        --插入学生表
        insert into odmdb.odm.student values(S_ID, S_NAME, S_DATE);

end;
$$ 
language plpgsql;

三、在数据库中测试存储过程
--执行存储过程
select My_LALIAN_PRO(1,'feiniu','201901');
执行结果如下: a.png

从图中可以看出,我们编写的存储过程没有问题。

四、使用 Kettle 执行 存储过程

在 sql 脚本窗口中填写调用语句:

select My_LALIAN_PRO(2,'tangtang','201902');
如下图: b.png
五、执行转换
  这一步最坑爹了,眼看到嘴的鸡腿却让他给飞了,执行时候竟然报 "存储过程不存在" 报错,这到底是为何?在网上找了差不多两天,在绝望之际在过程名前面加用户名,但是报一样的错误,此刻差点就从楼上跳到游泳池去了。。。 c.png
六、问题的解决
  后来发现我们的 greenplum 和 oracle 的过程调用有那么一丢丢不同,oracle 可以使用 "用户名.过程名" 方式进行调用,然而这种方式对于我们的 greenplum 大人不适合呀;经过观察发现,我们的 过程 和 表 都存放在 数据库的模式中,因此我们可以直接从这里入手,方式就是 "数据库.模式.存储过程/表名" ,现将过程中的表前面做如下修改: d.png

接下来在 kettle 脚本里边将 sql 语句改为:

select odmdb.odm.My_LALIAN_PRO(2,'tangtang','201902')
我们在执行发现已经成功了: e.png 此时发现表中多了一条数据: f.png
  到这里总算成功了,虽然看上去简单,但是在问题没有解决之前还是挺绝望的,为以后再次踩同一个坑,也为了后来人避免踩这个坑,做了个总结,如果觉得有帮助给个赞,谢谢!
  您的支持是我坚持总结的动力 * ^_^ *
上一篇下一篇

猜你喜欢

热点阅读