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

ETL工具Kettle对PostgreSQL *** 作的基本介绍,第1张

概述用途和背景 ETL (extract, transform, load)工具是用于数据库数据迁移清洗处理等 *** 作的工具。 我们有时会面临一种情况:实时运行的系统由于需求的变化而去更新DB的结构,这样便需要收集系统实时运行的数据,然后将其传入到新的DB结构中去,以确保实时运行的数据不会丢失。当然我们可以通过SQL(在没有bytea字段的情况下)或JDBC去完成整个流程,但是这样做远远不如ETL高效。

用途和背景

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@H_419_815@,选择没有资源库

二、新建transform

三、新建 DB Connection

四、新建 input@H_419_815@和output

五、建立input@H_419_815@和output之间的数据流Hop

六、保存transform

一个建立好的transform如图所示

B.新建一个子JOB

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

二、新建JOB

三、新建DB Connection

四、新建Start节点

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

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

七、建立多个Step@H_419_815@之间的Hop

八、保存Job

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


C、新建JOB

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

二、新建JOB

三、新建Start节点

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

五、建立多个Step@H_419_815@之间的Hop

六、保存Job

总结

以上是内存溢出为你收集整理的ETL工具Kettle对PostgreSQL *** 作的基本介绍全部内容,希望文章能够帮你解决ETL工具Kettle对PostgreSQL *** 作的基本介绍所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/1180735.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存