kettle生成主键UUID和调用转换作业

来源:互联网 发布:如何导出网页上的数据 编辑:程序博客网 时间:2024/06/01 19:46


kettle


  Kettle 已经归属Pentaho门下,4.1版本的下载地址:http://sourceforge.net/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
原创粉丝点击