用途和背景
ETL (extract, transform, load)工具是用于数据库数据迁移清洗处理等操作的工具。
我们有时会面临一种情况:实时运行的系统由于需求的变化而去更新DB的结构,这样便需要收集系统实时运行的数据,然后将其传入到新的DB结构中去,以确保实时运行的数据不会丢失。当然我们可以通过SQL(在没有bytea字段的情况下)或JDBC去完成整个流程,但是这样做远远不如ETL高效。
Bug修改
在Kettle中,在处理PostgreSQL数据时候,我们目前发现2个会对工作产生影响的Bug。其一是对bytea数据的处理,其二是对boolean数据的处理。我们可以简单对它的源码进行修改,使它可以运行起来。
修改一(对Bytea部分Bug的修改)
修改了org.pentaho.di.core.database.Database.java中关于Blob的处理
更改前为:
case ValueMetaInterface.TYPE_BINARY :
{
if (databaseMeta.supportsGetBlob()){
Blob blob = rs.getBlob(i+1);
//这里连接数据库为postgresql时,会抛出异常
if (blob!=null){
data[i] = blob.getBytes(
1L
, (int)blob.length());
}else{
data[i] = null;
}
}
else{
data[i] = rs.getBytes(i+1);
}
}
break;
更改后为:
case Va