ETL之kettle進行二次開發簡單demo
demo,利用kettle的api,將一個數據源中的資訊匯入到另外一個數據源中:
package cn.com.saidi.job; import org.apache.commons.io.FileUtils; import org.pentaho.di.core.KettleEnvironment; import org.pentaho.di.core.database.DatabaseMeta; import org.pentaho.di.core.exception.KettleDatabaseException; import org.pentaho.di.core.exception.KettleXMLException; import org.pentaho.di.core.plugins.PluginRegistry; import org.pentaho.di.core.plugins.StepPluginType; import org.pentaho.di.trans.TransHopMeta; import org.pentaho.di.trans.TransMeta; import org.pentaho.di.trans.step.StepMeta; import org.pentaho.di.trans.steps.insertupdate.InsertUpdateMeta; import org.pentaho.di.trans.steps.tableinput.TableInputMeta; import java.io.File; /** * Created by 戴橋冰 on 2017/1/16. */ public class TransDemo { public static TransDemo transDemo; /** * 兩個庫中的表名 */ public static String bjdt_tablename = "test1"; public static String kettle_tablename = "test2"; /** * 資料庫連線資訊,適用於DatabaseMeta其中 一個構造器DatabaseMeta(String xml) */ public static final String[] databasesXML = { "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<connection>" + "<name>bjdt</name>" + "<server>192.168.1.122</server>" + "<type>Mysql</type>" + "<access>Native</access>" + "<database>daiqiaobing</database>" + "<port>3306</port>" + "<username>root</username>" + "<password>root</password>" + "</connection>", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<connection>" + "<name>kettle</name>" + "<server>192.168.1.122</server>" + "<type>Mysql</type>" + "<access>Native</access>" + "<database>daiqiaobing</database>" + "<port>3306</port>" + "<username>root</username>" + "<password>root</password>" + "</connection>" }; public static void main(String[] args) { try { KettleEnvironment.init(); transDemo = new TransDemo(); TransMeta transMeta = transDemo.generateMyOwnTrans(); String transXml = transMeta.getXML(); String transName = "etl/update_insert_Trans.ktr"; File file = new File(transName); FileUtils.writeStringToFile(file, transXml, "UTF-8"); System.out.println(databasesXML.length+"\n"+databasesXML[0]+"\n"+databasesXML[1]); } catch (Exception e) { e.printStackTrace(); return; } } /** * 生成一個轉化,把一個數據庫中的資料轉移到另一個數據庫中,只有兩個步驟,第一個是表輸入,第二個是表插入與更新操作 * @return * @throws KettleXMLException */ public TransMeta generateMyOwnTrans() throws KettleXMLException, KettleDatabaseException { System.out.println("************start to generate my own transformation***********"); TransMeta transMeta = new TransMeta(); //設定轉化的名稱 transMeta.setName("insert_update"); //新增轉換的資料庫連線 for (int i=0;i<databasesXML.length;i++){ DatabaseMeta databaseMeta = new DatabaseMeta(databasesXML[i]); transMeta.addDatabase(databaseMeta); } //registry是給每個步驟生成一個標識Id用 PluginRegistry registry = PluginRegistry.getInstance(); //第一個表輸入步驟(TableInputMeta) TableInputMeta tableInput = new TableInputMeta(); String tableInputPluginId = registry.getPluginId(StepPluginType.class, tableInput); //給表輸入新增一個DatabaseMeta連線資料庫 DatabaseMeta database_bjdt = transMeta.findDatabase("bjdt"); tableInput.setDatabaseMeta(database_bjdt); String select_sql = "SELECT name FROM "+bjdt_tablename; tableInput.setSQL(select_sql); //新增TableInputMeta到轉換中 StepMeta tableInputMetaStep = new StepMeta(tableInputPluginId,"table input",tableInput); //給步驟新增在spoon工具中的顯示位置 tableInputMetaStep.setDraw(true); tableInputMetaStep.setLocation(100, 100); transMeta.addStep(tableInputMetaStep); //第二個步驟插入與更新 InsertUpdateMeta insertUpdateMeta = new InsertUpdateMeta(); String insertUpdateMetaPluginId = registry.getPluginId(StepPluginType.class,insertUpdateMeta); //新增資料庫連線 DatabaseMeta database_kettle = transMeta.findDatabase("kettle"); insertUpdateMeta.setDatabaseMeta(database_kettle); //設定操作的表 insertUpdateMeta.setTableName(kettle_tablename); //設定用來查詢的關鍵字 insertUpdateMeta.setKeyLookup(new String[]{"name"}); insertUpdateMeta.setKeyStream(new String[]{"name"}); insertUpdateMeta.setKeyStream2(new String[]{""});//一定要加上 insertUpdateMeta.setKeyCondition(new String[]{"="}); //設定要更新的欄位 String[] updatelookup = {"name"} ; String [] updateStream = {"name"}; Boolean[] updateOrNot = {true}; insertUpdateMeta.setUpdateLookup(updatelookup); insertUpdateMeta.setUpdateStream(updateStream); insertUpdateMeta.setUpdate(updateOrNot); String[] lookup = insertUpdateMeta.getUpdateLookup(); //新增步驟到轉換中 StepMeta insertUpdateStep = new StepMeta(insertUpdateMetaPluginId,"insert_update",insertUpdateMeta); insertUpdateStep.setDraw(true); insertUpdateStep.setLocation(250,100); transMeta.addStep(insertUpdateStep); //****************************************************************** //****************************************************************** //新增hop把兩個步驟關聯起來 transMeta.addTransHop(new TransHopMeta(tableInputMetaStep, insertUpdateStep)); System.out.println("***********the end************"); return transMeta; } }
上述操作將會產生一個ktr檔案,接下來的操作是對ctr檔案進行轉換:
public static void main(String[] args) throws KettleException { //初始化ketlle KettleEnvironment.init(); //建立轉換元資料物件 TransMeta meta = new TransMeta("etl/update_insert_Trans.ktr"); Trans trans = new Trans(meta); trans.prepareExecution(null); trans.startThreads(); trans.waitUntilFinished(); if(trans.getErrors()!=0){ System.out.println("執行失敗!"); } }
相關推薦
ETL之kettle進行二次開發簡單demo
demo,利用kettle的api,將一個數據源中的資訊匯入到另外一個數據源中: package cn.com.saidi.job; import org.apache.commons.io.FileUtils; import org.pentaho.di.core.Ke
vue2.0 日曆日程表 ,可進行二次開發.
由於工作業務需求,要寫一個日程表,日程表寫之前 要先生成日曆,廢話不多說,直接 上程式碼: <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="X-UA-Comp
移動端車牌識別技術,基於Android、iOS平臺,可進行二次開發
目前,我國警務通、停車場手持收費機等移動終端的使用比較普及,如果在這些終端上能夠整合車牌識別功能,對於維護交通安全和城市治安,實現交通自動化管理有著現實的意義。現在出現一款基於移動終端平臺的移動端車牌識別SDK,可方便的植入到警務通、手持收費機、掌上電腦、手機等
使用AcrGis進行二次開發(一)ArcGIS Engine授權及其物件模型介紹
一、ArcGIS Engine對Visual Studio的授權 我們在使用ArcGIS Engine進行二次開發的時候,必須要對VS進行授權,授權包括兩個方面:專案檔案(ArcSDK)授權以及模組授權(使用特定的模組,比如空間分析,網路分析,拓撲分析等需要額外
Alios-Things之wifi模組二次開發-(1)搭建Alios-Things開發環境(基於ubuntu 16.0.4)
一、安裝流程如下: 1.先安裝VSCode,保證有個可視的編輯器; 2.然後安裝aos-cube,是編譯工具; 3.最後安裝git工具,下載Alios-Things國內託管倉庫程式
五、Sketchup用ruby進行二次開發--建立圖形(面及pushpull、followMe方法的應用)
在上一節講到了如何建立直線、曲線、圓及弧線,本節講如何建立面和使用push/pull和Follow Me方法對面進行推拉建立三維體。 1、建立面 建立面使用的方法是add_face,也是繼承於Entities父類。add_face的引數是由一系列用逗號分割開的點或邊,下面看
四、Sketchup用ruby進行二次開發--Edge Arrays: Curves, Circles, Arcs和 Polygons
我們可以在Sketchup中用“弧”和“圓”工具去畫出相應圖形,但是我們畫出來並不是真正意義上的圓或弧形,而是由一段段細小的直線片段組成的。用編碼實現時,實體類有三個方法來生成類似於弧形的圖案,每一個方法返回的是一組邊物件集。這三個方法是add_curve, add_cir
一、Sketchup用ruby進行二次開發--簡述
首先我想說一下進行《Sketchup用ruby進行二次開發》的專欄的原因。 我的研究生論文是基於GIS的三維地下管線研究與實現,但是經過一段時間的學習,發現使用arcEngine和sketchup進行建模,不是很靠譜,原因是管線的數量有上萬條之
二、Sketchup用ruby進行二次開發--Sketchup轉換操作符
我這裡有一張表,講Sketchup轉換操作符的用法。 第一條表示:2.54釐米(cm)=1 英寸 ( Inches )。 在Sketchup內部儲存長度使用的事英制,即使你在選擇模板使用的是米或是毫米。基於這個原因,下面這個表才顯得尤為重要,它可以方便在英制與公制或
六、Sketchup用ruby進行二次開發--建立球體
本節是複習上節講到的followme方法,下面看看用followme方法畫球形。 #============建立球體============== ents = Sketchup.active_model.entities # 建立一個正向為(0,0,1)的圓面 cent
七、Sketchup用ruby進行二次開發--利用Transformation實現Move工具(平移、旋轉和縮放)
在Sketchup中,move工具使用的非常廣泛,,可以移動、拉伸和複製幾何體,也可以用來旋轉元件。舉一個簡單地例子。 我們要做一個建築物的尖頂,如下圖所示,就是使用move工具實現的。 接下來我們就要學習如何使用ruby實現這樣的功能
三、Sketchup用ruby進行二次開發--實體類和構件圖類
實體類是所有可畫圖形的子類,如下圖所示。實體類的主要子類是構件圖類,構件圖類是我們今後重點學習的類,包括Image、Text、Edge、Face、Group、Component Definition和Component Instance。下面對這兩個類做簡要說明。
【git】基於github開源平臺的專案進行二次開發
1.安裝git服務: https://blog.csdn.net/oqqHun123/article/details/85791425 2.開啟github官網: https://github.com/ 3.輸入自己需要檢索的關鍵字 注:adm
CrashMonkey4Android-如何進行二次開發
如何進行二次開發 下載原始碼 我們可以開發的原始碼分兩部分,這個我在cts專輯中也講過,cts分兩部分,一個是基礎庫,一個是執行庫,所以我們的原始碼也分為兩部分 執行庫 同步CrashMonkey4Android原始碼: https://git
PIXHAWK進行二次開發
有改動的話,自己再研究研究吧(後面換cmake編譯方式了,改動蠻大)。 既然要做開發,第一步就是搭好開發環境,根據我的經驗,最好是在linux環境下編譯,這樣效率會很快,以前在windows下編譯,經常40分鐘以上,這樣就太影響開發了; 第二步,大概瞭解下韌體的架構,&lt;img src="
ArcGIS10.2在VS2010/VS2012/VS2013 下進行二次開發及編譯出錯解決
平臺:VS2010、VS2012、VS2013 + ArcGIS 10.2 + Win7 64bit 使用ArcGIS10.2結合MFC進行二次開發,編譯出錯。 首先配置工程,在工程上右鍵->
control-m中 利用 bmc 公司提供的api 進行二次開發 介紹
API功能介紹 Control-M提供了使用者進行二次開發包,支援JAVA程式設計,使用者能根據自己需要通過API進行開發,該API只支援使用者編寫自己的Control-M/EM客戶端,編寫自己的介面給Control-M/EM服務端傳送各種請求。因為API只是與Control
jmeter之java請求二次開發
說明與步驟 原則上jmeter的java請求,可以壓測一切可使用java訪問的東西,包括Redis,MQ等等。 需要lib/ext中的ApacheJMeter_core.jar,如擴充套件java請求則還需要ApacheJMeter_java.jar,擴充套
kettle外掛二次開發
先把環境搭建好,這裡可以參考我之前的部落格,或者比較好的參考文獻: 原理部分: 轉換外掛開發: kettle轉換步驟外掛至少需要實現四個介面: org.pentaho.di.trans.step.StepInterface 負責資料處理,轉換和流轉。這裡面主要
java語言對arcgis進行二次開發
本文章是在已安裝arcgis(最好是完整版,在ArcGIS_Desktop資料夾下面含有SDK_java,並保證其已安裝)並且javaJDK已安裝且環境變數都已經配置好的前提下適用,具體怎麼安裝去網上搜吧有很多相關教程。(由於SDK_java只支援32JDK,所以請保證你的