分享

Kettle

 集微笔记 2013-09-13

Kettle

 

    Kettle 已经归属Pentaho门下,4.1版本的下载地址:http:///projects/pentaho/files/Data%20Integration/4.1.0-stable/

 

    项目中使用软件,我的感觉是不必追求最新版,稳定是优先考虑的。3.2版本也是不错的。使用中感觉kettle总体表现还是不错的,使用方式也都比较好理解。但其中个别的地方还是给初学者制造了些小麻烦。

 

以下是我的一点经验:

 

1. 资源库在原有数据库中建立了很多Kettle的表,建议最好不用,就用文件存储

 

2. 参数的传递问题

 

Job 定时任务的时候,可以在其所包含的Transformation中,由“获取系统信息”组件定义时间参数,由“表输入”

组件的SQL动态获取。

不过SQL中的参数不能用${param}这种形式获取,而是用?来代替。其中的缘由可以参见官方FAQ里面Argument 和 variables 的区别。

   

 

3. UUID的生成

 

如果你的ID是UUID,需要kettle来生成。就用“脚本”里面的“Modified Java Script Value”组件,代码如下:

 

 

Js代码 复制代码 收藏代码
  1. //Script here   
  2. function UUID(){   
  3.     this.id = this.createUUID();   
  4. }   
  5.   
  6. UUID.prototype.valueOf = function(){ return this.id; }   
  7. UUID.prototype.toString = function(){ return this.id; }   
  8.   
  9. UUID.prototype.createUUID = function(){   
  10.     var dg = new Date(1582, 10, 15, 0, 0, 0, 0);   
  11.     var dc = new Date();   
  12.     var t = dc.getTime() - dg.getTime();   
  13.     var h = '';   
  14.     var tl = UUID.getIntegerBits(t,0,31);   
  15.     var tm = UUID.getIntegerBits(t,32,47);   
  16.     var thv = UUID.getIntegerBits(t,48,59) + '1';   
  17.     var csar = UUID.getIntegerBits(UUID.rand(4095),0,7);   
  18.     var csl = UUID.getIntegerBits(UUID.rand(4095),0,7);   
  19.   
  20.     var n = UUID.getIntegerBits(UUID.rand(8191),0,7) +    
  21.             UUID.getIntegerBits(UUID.rand(8191),8,15) +    
  22.             UUID.getIntegerBits(UUID.rand(8191),0,7) +    
  23.             UUID.getIntegerBits(UUID.rand(8191),8,15) +    
  24.             UUID.getIntegerBits(UUID.rand(8191),0,15);    
  25.     return tl + h + tm + h + thv + h + csar + csl + h + n;    
  26. }   
  27.   
  28. UUID.getIntegerBits = function(val,start,end){   
  29.     var base16 = UUID.returnBase(val,16);   
  30.     var quadArray = new Array();   
  31.     var quadString = '';   
  32.     var i = 0;   
  33.     for(i=0;i<base16.length;i++){   
  34.         quadArray.push(base16.substring(i,i+1));       
  35.     }   
  36.     for(i=Math.floor(start/4);i<=Math.floor(end/4);i++){   
  37.         if(!quadArray[i] || quadArray[i] == '') quadString += '0';   
  38.         else quadString += quadArray[i];   
  39.     }   
  40.     return quadString;   
  41. }   
  42.   
  43. UUID.returnBase = function(number, base){   
  44.        
  45.     var convert = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];   
  46.     if (number < base) var output = convert[number];   
  47.     else {   
  48.         var MSD = '' + Math.floor(number / base);   
  49.         var LSD = number - MSD*base;   
  50.         if (MSD >= base) var output = this.returnBase(MSD,base) + convert[LSD];   
  51.         else var output = convert[MSD] + convert[LSD];   
  52.     }   
  53.     return output;   
  54. }   
  55.   
  56. UUID.rand = function(max){   
  57.     return Math.floor(Math.random() * max);   
  58. }   
  59.   
  60. var ID=new UUID().id;  

 

 

4. Java 执行Transportation

Java代码 复制代码 收藏代码
  1. @Test  
  2. public void executeTrans() throws KettleException {   
  3.     try {   
  4.         StepLoader.init();   
  5.         EnvUtil.environmentInit();   
  6.         TransMeta transMeta = new TransMeta("d:/test.ktr");   
  7.         Trans trans = new Trans(transMeta);   
  8.   
  9.         trans.execute(null); // Pass arguments instead of null.   
  10.         trans.waitUntilFinished();   
  11.         if (trans.getErrors() > 0) {   
  12.             throw new RuntimeException("There were errors during transformation execution.");   
  13.         }   
  14.     } catch (KettleException e) {   
  15.         System.out.println(e);   
  16.     }   
  17.   
  18. }  

 

 

 

5. Java 执行Job

Java代码 复制代码 收藏代码
  1. @Test  
  2.     public void executeTrans() throws KettleException {   
  3.         EnvUtil.environmentInit();   
  4.         JobEntryLoader.init();   
  5.         StepLoader.init();   
  6.   
  7.         LogWriter log = LogWriter.getInstance("TransTest.log"true, LogWriter.LOG_LEVEL_DETAILED);   
  8.         JobMeta jobMeta = new JobMeta(log, "d:/testjob.kjb"null);   
  9.         Job job = new Job(log, StepLoader.getInstance(), null, jobMeta);   
  10.         jobMeta.setInternalKettleVariables(job);   
  11.         job.execute();   
  12.         job.waitUntilFinished();   
  13.   
  14.     }  

 

 

 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约