kettle的入門
kettle是一個用java寫的開源ETL工具,工作中用到了,分享一下使用
安裝:
下載解壓即可:
解壓完成後,安裝環境變量
vim ~/.bash_profile下編輯
編輯完成後source bash_profile即可。
進入解壓目錄 sh spoon.sh即可運行
運行效果如下
注意,最新版本需要JDK1.8
安裝完成後就可以使用了
kettle文件有二種類型 job 和 trans(轉換) ,job從類型上看應該是trans的擴展版本
job:job中可以直接調用轉換
trans:
介紹一下常用的組件
設置變量
可以設置job內的全局變量,我這邊直接是從配置文件讀取
數據庫的配置
Json格式數據的處理
java腳本
這裏詳細說一下,java腳本必須要實現如下的方法
public booleanprocessRow(StepMetaInterface
smi, StepDataInterface sdi)throwsKettleException {
}
雙擊此處Main可以快速生成如上方法
可以引用額外的方法
但是你的lib下或者項目中必須要有對應的jar,否則報錯
獲取輸出字段
Object[] r =getRow();
if(r == null) {
setOutputDone();
returnfalse;
}
r = createOutputRow(r, data.outputRowMeta.size());
新增輸出字段如下
獲取指定的輸入字段
String zhengxinJson = get(Fields.In,"limuzhengxinJson").getString(r);
字段的過濾和修改
行轉列
這個是將橫表改成縱表,由於需求變更,對應的部分被我刪除了,後續再補上
數據的入庫
數據直接的連接
kettle的日誌配置
庫表的記錄如下
配置文件加載,配置在命名參數裏面即可
上面做好,會生成對應的job/trans文件
java的調度
文件生成好,如何在項目裏調用了?
1.新增依賴
<kettle.version>8.0.0.1-67</kettle.version>
<!-- kettle -->
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-core</artifactId>
<version>${kettle.version}</version>
<exclusions>
<exclusion>
<groupId>jug-lgpl</groupId>
<artifactId>jug-lgpl</artifactId>
</exclusion>
<exclusion>
<artifactId>commons-vfs2</artifactId>
</exclusion>
<exclusion>
<groupId>secondstring</groupId>
<artifactId>secondstring</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion>
<artifactId>xercesImpl</artifactId>
<groupId>xerces</groupId>
</exclusion>
<exclusion>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>batik-js</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.verhas</groupId>
<artifactId>license3j</artifactId>
<version>1.0.7</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-dbdialog</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho-kettle</groupId>
<artifactId>kettle-engine</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>pentaho</groupId>
<artifactId>metastore</artifactId>
<version>${kettle.version}</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>org.pentaho.di.plugins</groupId>
<artifactId>kettle-json-plugin-core</artifactId>
<version>8.0.0.0-28</version>
</dependency>
<dependency>
<groupId>org.pentaho.di.plugins</groupId>
<artifactId>kettle-json-plugin</artifactId>
<version>8.0.0.0-28</version>
<type>zip</type>
</dependency>
<!-- kettle —>
新增倉庫地址
<repository>
<id>pentaho-public</id>
<name>Pentaho Public</name>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
新增插件地址
<pluginRepository>
<id>pentaho-public</id>
<name>Pentaho Public</name>
<url>http://nexus.pentaho.org/content/groups/omni</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</pluginRepository>
Pom文件配置好後
*/
public synchronized void callNativeTransWithParams(String[] params,String transFileName)
throws Exception {
// 解決jar包衝突
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
// 設置本地的插件
StepPluginType.getInstance().getPluginFolders().add(newPluginFolder("/opt/scf/ec/provider/kettle/plugins",
false, true));
// 加載插件
KettleEnvironment.init();
// 初始化系統環境變量
EnvUtil.environmentInit();
// 生成一個轉換元
TransMeta transMeta =
new TransMeta(transFileName);
//transMeta.setVariable();
// 轉換
Trans trans =
new Trans(transMeta);
// 執行
trans.execute(params);
// 等待結束
trans.waitUntilFinished();
}
/**
* 調用job文件
* callNativeJob: TODO
*
* @paramjobName
*@throws
Exception
* @throws
*/
public synchronized void callNativeJob(String jobName)throws
Exception {
// 解決jar包衝突
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
// 設置本地的插件
StepPluginType.getInstance().getPluginFolders().add(newPluginFolder("/opt/scf/ec/provider/kettle/plugins",
false, true));
// 初始化
KettleEnvironment.init();
JobMeta
jobMeta = new JobMeta(jobName, null);
Job job =
new Job(null, jobMeta);
// 設置參數
// job.setVariable(paraname, paravalue);
job.start();
job.waitUntilFinished();
}
這裏說下這二句代碼:(ps,這二個問題,糾結了半天,在stackoverflow上找到了答案)
第一個是解決jar包衝突
System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl”);
第二個是解決插件不存在的錯誤
StepPluginType.getInstance().getPluginFolders().add(newPluginFolder("/opt/scf/ec/provider/kettle/plugins",
false, true));
這樣我們就能在項目中調度生成的文件
kettleUtil.callNativeJob(KettleConst.KETTLE_SHOP_JOB);
我參考了網上很多的集成代碼,很多已經過時了,我這個應該算是最新的,maven庫依賴都是我從官網上一個一個找的
網上的maven庫都不能用,以此參考
上面案例的地址:
https://github.com/krauser1991/kettle
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.