Kettle入门与Java程序调用Kettle

    Pentaho Data Integration(Kettle)是一个免费开源的基于Java的ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)工具,纯JAVA编写,绿色无须安装,且数据抽取高效稳定,通常用作数据迁移。Kettle中有两种脚本文件,transformation和job,transformation完成针对数据的基础转换,job完成对整个工作流的控制。

    下面记录下简单的使用流程:

    这里需要连接两个数据库,把A数据库的数据导入到B数据库,比如从SQL Server导数到MySQL,就需要如下两个数据库驱动(这里两个数据库都是使用JDBC的方式去连接的):

    Kettle入门与Java程序调用Kettle_第1张图片

    启动

            在Windows系统下,双击"Spoon.bat"即可,在类Unix系统下,需要给脚本Spoon.sh添加可执行权限才行:

            Kettle入门与Java程序调用Kettle_第2张图片 

            启动完成后页面如下:

            Kettle入门与Java程序调用Kettle_第3张图片 

    基本概念

        Kettle转换

           转换主要针对数据的各种处理,包括一个或多个步骤,步骤之间通过跳(hop)来连接。跳定义了一个单向通道,允许数据从一个步骤流向另一个步骤,在Kettle中,数据的单位是行,数据流就是数据行从一个步骤到另一个步骤的移动。

           上面说到的步骤,是转换的基本组成部分,以图标的形式出现,如表输入、表输出等。步骤将数据写到与之相连的一个或多个输出,再传送到跳的另一端的步骤,即跳是步骤之间带箭头的连接线。

           在Kettle中,所有的步骤都以并发的方式运行。当转换启动后,所有的步骤都同时启动。            

        Kettle作业

           作业包括一个或多个作业项,作业项以某种顺序来执行。

            作业项与转换中的步骤类似,作业项也以图标的方式图形化展示。作业项之间可以传递结果对象。结果对象里包含了数据行,它们不是以流的方式来传递的,而是等一个作业项执行完了,再传递给下一个作业项,默认情况下,所有的作业项以串行的方式执行的。

    示例

           了解了作业和转换的基本概念,下面来简单使用一下(为了简单,这里不做异库数据迁移,仅仅从一个数据库读取数据,然后写到本地文件)。

            1. 新建作业(文件类型后缀为kjb)

                Kettle入门与Java程序调用Kettle_第4张图片

            2. 新建转换(文件类型后缀为ktr)

                 Kettle入门与Java程序调用Kettle_第5张图片

            3. 在第1步的Transformation这个步骤右键->Edit关联第2步的转换文件

                 Kettle入门与Java程序调用Kettle_第6张图片

            4. 新建数据库连接

                在作业的View栏里的DatabaseConnection新建数据库连接,并右键->'Share',这样,当前作业的所有转换都可以使用这个数据库连接

                Kettle入门与Java程序调用Kettle_第7张图片

            5. 编辑转换的表数据步骤如下

                Kettle入门与Java程序调用Kettle_第8张图片

            6. 执行作业

                Kettle入门与Java程序调用Kettle_第9张图片

                结果文件如下:

                Kettle入门与Java程序调用Kettle_第10张图片

            7. 界面使用Kettle就到这里,Kettle还有很多组件可以使用,可以根据实际需求摸索一下。

                界面操作难免对于自动化处理来说不方便,这时,可以使用Java程序对其调用来实现。

 

-------------------------------------------------------------------- 华丽丽的分割线 --------------------------------------------------------------

 

            8. 修改Maven的settings.xml文件,增加下载kettle依赖的仓库中心地址,编辑profiles子节点如下所示:

                


    
    	pentaho
    	
    		true
    	
    	
    		
    			pentaho.resolve.repo
    			Pentaho Omni
    			http://nexus.pentaho.org/content/groups/omni
    			
    				true
    				always
    			
    			
    				true
    				always
    			
    		
    	
    	
    		
    			plugins
    			Maven Central
    			http://nexus.pentaho.org/content/groups/omni
    			
    				true
    				always
    			
    			
    				true
    				always
    			
    		
    	
    
    
    
    	central
    	
    			true
    	
    	
    		
    			pentaho.resolve.repo
    			Pentaho Omni
    			http://nexus.pentaho.org/content/groups/omni
    			
    				true
    				always
    			
    			
    				true
    				always
    			
    		
    	
    	
    		
    			plugins
    			Maven Central
    			http://repo1.maven.org/maven2
    			
    				true
    				daily
    			
    			
    				true
    				always
    			
    		
    	
    
  

            9. 新建基于maven管理的Java项目,修改pom.xml,增加如下内容:

                


        
            com.google.guava
            guava
            22.0
        
        
            pentaho-kettle
            kettle-core
            7.0.0.0-25
        

        
            pentaho
            pentaho-database-model
            7.0.0.0-25
        

        
            pentaho-kettle
            kettle-engine
            7.0.0.0-25
            
                
                    org.eclipse.jetty
                    jetty-server
                
                
                    org.eclipse.jetty
                    jetty-servlet
                
                
                    org.eclipse.jetty
                    jetty-webapp
                
                
                    org.eclipse.jetty
                    jetty-xml
                
                
                    org.eclipse.jetty
                    jetty-plus
                
                
                    org.eclipse.jetty
                    jetty-security
                
            
        

        
            org.pentaho.reporting.library
            libformula
            7.0.0.0-25
        

        
            pentaho-kettle
            kettle-ui-swt
            7.0.0.0-25
        

        
            pentaho-kettle
            kettle-dbdialog
            7.0.0.0-25
        

        
            pentaho-kettle
            kettle5-log4j-plugin
            7.0.0.0-25
            zip
        

        
            org.pentaho.reporting.engine
            classic-extensions-kettle
            7.0.0.0-25
        
    

    
        
            pentaho-releases
            http://repository.pentaho.org/artifactory/repo/
        
    

    
        
            public
            Public Repositories
            http://maven.aliyun.com/nexus/content/groups/public/
        
    

           10. 测试类

package cn.linjk.kettle;

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.logging.LogLevel;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;

public class Main {
    public static void main(String[] args) throws Exception {
        KettleEnvironment.init();
        
        JobMeta jobMeta = new JobMeta("D:\\Programming\\test.kjb", null);
        Job job = new Job(null, jobMeta);
        job.setLogLevel(LogLevel.ROWLEVEL);
        job.start();
        job.waitUntilFinished();
    }
}

                运行报如下错误:

                Kettle入门与Java程序调用Kettle_第11张图片

                需要修改转换的引用路径为实际路径,原来为kettle自己的表达式:

                Kettle入门与Java程序调用Kettle_第12张图片

                再次运行错误:

                Kettle入门与Java程序调用Kettle_第13张图片

                pom.xml加数据库依赖:


    mysql
    mysql-connector-java
    runtime
    5.1.46

              运行成功:

              Kettle入门与Java程序调用Kettle_第14张图片

           流程就是这样子,也可以直接运行转换:

           Kettle入门与Java程序调用Kettle_第15张图片

           更多的Java调用kettle的API可以自己看源码接口进行调用尝试。

你可能感兴趣的:(JAVA)