微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ETL工具Kettle对PostgreSQL操作的基本介绍

用途和背景

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 ValueMetaInterface.TYPE_BINARY :
  
  
{
  
  
 if (databaseMeta.supportsGetBlob()){
  
  
 try{
  
  
 Blob blob = rs.getBlob(i+1);
  
  
 if (blob!=null){
  
  
 data[i] = blob.getBytes(
  
  
    1L 
  ,(int)blob.length());
  
  
 }else{
  
  
 data[i] = null;
  
  
 }
  
  
 }catch(Exception ex){
  
  
 try{
  
  
 data[i] = rs.getBytes(i+1);
  
  
 }catch(Exception e){
  
  
 data[i] = null;
  
  
 }
  
  
 }
  
  
 }else{
  
  
 data[i] = rs.getBytes(i+1);
  
  
 }
  
  
}
  
  
break;
  
  

修改二(对boolean部分Bug修改

修改org.pentaho.di.core.database. PostgresqlDatabaseMeta.java中关于Boolean类型的处理,在认情况下即PostgresqlDatabaseMeta 的基类BaseDatabaseMeta中是不支持Boolean数据类型的, supportsBooleanDataType返回值是false,我们在PostgresqlDatabaseMetaoverwrite这个函数以实现KettlePostGresql中关于Boolean数据类型的支持

public boolean supportsBooleanDataType() {

return true;

}

修改这两处后,利用ant进行重新build,就可以生成全新的Kettle 但是在修改二中这样做又引入了新的Bug,即不能将Kettlerepository创建到Postgresql中,这样也就意味着我们不能以Postgresql数据库形式共享项目文件但是这样做的好处是极大的方便我们日常的工作,可以方便的进行数据迁移清洗等操作。当我们需要进行项目共享的时候,我们可以通过CVS等方式实现repository共享。

基本概念

我们常使用Spoon(是Kettle中的一个子项目)进行数据transfer,这里只是自己对下面一些基本概念的理解,具体请自行参见Spoon的文档。

Transform:定义了数据transfer的基本操作流程,通常包括Input OutputHop

Job:定义了一组数据transfer的操作流程,可以包括多个Jobtransform

Input:定义了数据流的起点

Output:定义了数据流的终点

Step:是transform的基本构成点,InputOutput都是一种step

DB Connection:定义了数据库连接的名字,通常和Input以及Output配合使用

Start:定义了Jobtransfer的起点

Hop:表示Step间数据的流向

sql脚本:JOB中多个Transform或子JOB之间表示需要执行的sql脚本

以上仅仅是罗列了最基本最常用的Step Spoon中还有多种Step可供使用以方便Job的设计和使用,具体的可以参见Spoon文档。

基本使用方法

A.新建一个Transform

一、打开Spoon,选择没有资源库

二、新建transform

三、新建 DB Connection

四、新建 inputoutput

五、建立inputoutput间的数据流Hop

六、保存Transform

一个建立好的transform如图所示

B.新建一个JOB

一、打开Spoon,选择没有资源库

二、新建JOB

三、新建DB Connection

四、新建Start节点

五、新建sql脚本,设置要执行的脚本,选择必要的DB Connection

六、新建Transform节点,设置已经存在的Transform

七、建立多个Step间的Hop

八、保存Job

一个建立好的子JOB如图所示


C、新建JOB

一、打开Spoon,选择没有资源库

二、新建JOB

三、新建Start节点

四、新建JOB节点,设置已经存在的JOB

五、建立多个Step间的Hop

六、保存Job

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐