1. 程式人生 > >專案知識學習篇———資料清洗之kettle以及整合到java專案

專案知識學習篇———資料清洗之kettle以及整合到java專案

一、kettle工具下載

連結: https://pan.baidu.com/s/13Mx-QJkY-5dY-nDIpuZAzw 提取碼: x146

pdi-ce-8.1.0.0.zip就是kettle軟體   下載之後解壓     進入資料夾根目錄點選Spoon.bat就能開啟客戶端

 二、kettle使用

  1.需要連線上兩個資料庫   一個是你想要copy的庫    還有一個是你自己的庫    我這裡是需要從一個oracle庫拿到資料    然後放入到我這邊的mysql資料庫

  2.右鍵DB連線   新建連線

3.我這裡使用的是oracle和mysql需要兩個連線包   在我網盤連結裡有  ojdbc14-10.2.0.2.0.jar和mysql-connector-java-5.1.41.jar     拷貝放入到kettle的lib下上一步就可連線成功

4.然後就是兩個庫的關聯對映  點選檔案---新建----轉換   將以下兩個  表輸入和插入/更新拖到轉換之中   用shift將兩個連線起來   效果如下

5.點選表輸入  連線上你想要拷貝資料庫的源資料庫   獲取sql語句就是查詢你想要的表的資料

6.點選 插入更新  連線上你的本地資料庫   瀏覽找到對應表  關聯上兩個表的唯一標示id  類似主鍵關聯  kettle根據這個判斷插入還是更新

然後下面關聯上你想要更新的欄位點確定就可以跑起來了

7.這樣你就可以從一個庫同步資料到你的庫    你可以在你本機windows下執行也可以在linux系統下部署kettle  然後可以新建job來呼叫轉換  實現定時更新資料

儲存這個轉換你可以得到一個.ktr檔案  純Java編寫的可以整合到Java專案之中

 三、整合到java專案

 1.以上 的方式可以拿到資料   不過部署到linux系統由於kettle有點大   再去伺服器中呼叫   想想還是算了   還是整合到Java專案中更合理

2.整合到java專案需要幾個包

<!-- kettle相關jar包 --> <dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-core</artifactId>

<version>8.1.0.0-365</version> </dependency>

<dependency> <groupId>pentaho-kettle</groupId> <artifactId>kettle-engine</artifactId> <version>8.1.0.0-365</version> </dependency>

<dependency> <groupId>pentaho</groupId> <artifactId>metastore</artifactId> <version>8.1.0.0-365</version> </dependency>

<dependency> <groupId>org.apache</groupId> <artifactId>commons-vfs2</artifactId> <version>2.2</version> </dependency>

<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>17.0</version> </dependency>

<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.10</version> </dependency>

<dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.3</version> </dependency>

<dependency> <groupId>oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.2.0</version> </dependency>

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency> <!-- kettle jar包結束 -->

3.jar包我分享的網盤有   國內映象沒有kettle相關包  可以把我的包加入你maven的本地倉庫中就好   有些是沒用的  根據上面我給的pom加就好

4.建立一個service類   呼叫kettle的轉換生成的.ktr檔案就可以整合到java中  然後我們可以使用spring定時排程框架Task定時呼叫這個類就實現了定時更新資料  是不是很方便啊  嘿嘿嘿

@Service("getCompanyInfoService")public class GetCompanyInfoService {

/*

//main方法用於測試 public static void main(String[] args) {

//ktr檔案路徑 String filePath =CompanyAndVehicleInfo.companyPath; //指定xml解析

 System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); runKtr(filePath);

                }

*/

public static void runKtr() { // ktr檔案路徑 String filePath = CompanyAndVehicleInfo.companyPath; // 指定xml解析 System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); try { // 初始化 KettleEnvironment.init(); // 建立ktr元物件 TransMeta transMeta = new TransMeta(filePath); // 建立ktr Trans trans = new Trans(transMeta); // 執行ktr trans.execute(null); // 等待執行完畢 trans.waitUntilFinished(); // 判斷執行是否出錯 if (trans.getErrors() > 0) { System.err.println("檔案執行出錯!!!!!!!!"); }

} catch (KettleException e) { // TODO Auto-generated catch block e.printStackTrace(); } }

}

5.Task類

@Component@EnableSchedulingpublic class CompanyAndCycleTask { @Autowired private GetCompanyInfoService getCompanyInfoService;

// 設定每天2.00 @Scheduled(cron = "0 0 2 * * ?") @Scheduled(fixedRate = 1000 * 60 * 10) public void getCompanyInformation() { getCompanyInfoService.runKtr();

}