暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一篇关于开源ETL工具Kettle工具对PostgreSQL支持有BUG的辟谣

Orison的孤独奋斗 2016-10-26
810

网上有一篇文章,上面写了Kettle工具对PostgreSQL支持有BUG的部分:

原文链接:http://blog.csdn.net/jaytse/article/details/2985977

因为工作需要,有可能会舍弃kettle,所以自己手动试了一下,发现并没有任何问题。也许是因为该篇博客用的kettle版本太老了。这里附上自己一个demo的全过程。

 

先对一些数据类型做出解释。

1.BLOB类型,Oracle中存储二进制长文本的数据类型。

2.Oracle中没有布尔类型,所以在这里用char(1)代替。

3.bytea类型,PostgreSQL中存储二进制长文本的数据类型。

 

首先在Oracle里建表。表名为test1(此表是同事所建立,我进行了修改),表结构如下:

其中,s_id是number主键,s_name是varchar2,age取的blob类型,flag取的char(1)。

并且插入了几条数据,插入blob需要这样操作:

insert into 表名 values(UTL_RAW.cast_to_raw(‘字符串’));

用raw传进BLOB数据。

正常select结果如下:

可以看到,BLOB类型默认是不会显示结果的。想要查看结果的话,可以这样查询:

同样也是用cast转化,就可以看到我们想要的数据。

 

接下来我们要在PostgreSQL里建立同样的表,表结构如下:

可以看到,这里的age类型是bytea类型,而flag是布尔类型。

 

接下来我们要用到kettle。

在kettle的ETL过程里,添加了三个组件,输入,转换,输出。

首先是输入:

可以看到,我这里把允许简易转换的选项勾掉了。因为这个选项涉及字符集的问题。有时候发生乱码你勾上就会不乱,有时候你勾上反而会乱。这个具体情况具体而定。

该输入的预览结果如下:

可以看到,在kettle里,会自动处理BLOB类型的数据让其展示。

第二步是JavaScript脚本代码,也是非常简单,加了个Boolean的flag2字段:

然后是第三步输出。习惯性选的输出一定是“插入更新”组件而并非是“表更新”组件:

用来比较的关键字自然是主键,而更新列则设置好对应的映射。

接下来是运行结果:

ETL完成!然后在PostgreSQL的shell里查看结果:

发现bytea会用16进制来展示,那么在kettle里是不是也可以像Oracle一样展示我们能看得懂的数据呢?我们在kettle里新建一个表输入,并且预览下:

结果是可以的!

说明当今版本的kettle并没有PostgreSQL的二进制文本和布尔数据类型的BUG。


文章转载自Orison的孤独奋斗,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论