网上有一篇文章,上面写了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。