JAVA调用KETTLE——以excel数据入库为例

第一步

配置kettle转换并导出ktr文件

1.总览:

JAVA调用KETTLE——以excel数据入库为例_第1张图片

2.excel输入配置:

因为要实现excel的文件目录通过JAVA动态传输过来,在文件目录里填写变量名,并点击增加,就会将其添加到选中的文件中,如图:
JAVA调用KETTLE——以excel数据入库为例_第2张图片
工作表可以不用填,如果填写的话,一定要与实际使用的工作表名一致。
在字段栏里维护好excel的字段头,如图:
JAVA调用KETTLE——以excel数据入库为例_第3张图片

3.获取变量:

JAVA调用KETTLE——以excel数据入库为例_第4张图片

4.生成随机数:

kettle生成随机数,作为入库后的主键
JAVA调用KETTLE——以excel数据入库为例_第5张图片

5.表输出:

将读取到流中的数据统一入库,先选择一个数据库链接,然后选择目标表,最后设定字段映射,如图:
JAVA调用KETTLE——以excel数据入库为例_第6张图片

6.导出ktr文件:

JAVA调用KETTLE——以excel数据入库为例_第7张图片

第二步

将调用kettle所需的jar包添加到你的项目中

所需的jar包都在kettle本地目录的lib文件夹下

如我这里的路径为:E:\data-integration\lib

我这边引用的jar包如下:

JAVA调用KETTLE——以excel数据入库为例_第8张图片

●如果在学习中,可以将整个lib下的包都考到项目中
●如果在项目中,可以先copy下面java代码,然后根据报错依次添加

第三步

编写调用JAVA代码

1.编写KettleUtil调用公共类

public class KettleUtil {

       public String RES_DIR = "res";  
       private String fullFileName ;  

       public KettleUtil(String fileName){
           //设定ktr的文件所在路径,这里可自行根据项目classpath替换
           //这样设定的结果,如果跑在tomcat中,则需要把ktr放到apache-tomcat-7.0.70\bin\res路径下。
           fullFileName = System.getProperty("user.dir") + File.separator + RES_DIR;

           fullFileName += File.separator + fileName;  

           }


       /** 
        * 没有参数是,设置参数为null 
        * @param paras 
        */  
       public void runTransformation(Map paras) {

          try {  
            //kettle初始化
            KettleEnvironment.init();  

            TransMeta transMeta = new TransMeta(fullFileName);  

            Trans  transformation =new Trans(transMeta);  

            for(Map.Entry entry: paras.entrySet()) {
                    //向ktr中传值
                transformation.setVariable(entry.getKey(), entry.getValue());
            }  

            transformation.execute(null);  

            transformation.waitUntilFinished();  

            if (transformation.getErrors() > 0) {  

               throw new RuntimeException(

                    "There wereerrors during transformation execution.");

            }  

          } catch (KettleException e) {  

            System.out.println(e);  

          }  

       }  
}

2.编写调用代码

public void kettleExcelToSql(String fileUrl,String pc)throws Exception{
        //fileUrl和pc等变量自行修改
        fileUrl ="F:/uploadFiles/file/20180509180124.xls";
        pc = "已入库";

        //调用ktr文件的文件名为excelToSql.ktr
        //就是放到apache-tomcat-7.0.70\bin\res路径下的ktr文件
        KettleUtil etl = new KettleUtil("excelToSql.ktr");

        Map<String,String> para = new HashMap<String,String>();

        //给转换中命名参数赋值,这里将需要解析的excel文件路径fileUrl传到ktr中  
        para.put("FILE_PATH", fileUrl);  
        //传递数值,并将其同excel的数据一起入库
        para.put("PC", pc); 

        etl.runTransformation(para);  
    }

最后一步

将ktr文件放到指定的路径下

将kettle导出的ktr文件放在KettleUtil设定的路径下:
这里写图片描述

注意:本文中kettle版本为7.0,使用jdk版本为1.8

你可能感兴趣的:(kettle技术)