數據倉庫工具 kettle 持續更新

獲取文中mysql數據庫中表結構和數據

文件導入導出

 


Hop眺: 就是步驟之間帶箭頭的連線,眺定義了步驟之間的數據通路。跳實際是兩個步驟之間的被稱爲——行集的數據緩存,在流程運行過程中數據會先往hop中寫。當行集滿了,向行集數據寫入數據就會停止,知道行集裏又有了空間。當行集空了,從行集讀取數據的步驟會停止,直到行集裏又有了可讀的數據。行集的大小可以在轉換的設置裏進行設置,如下圖:

                   

               

 

 

 

 

 

 

 

 

kettle核心概念:

轉換:   轉換是ETL解決方案中最主要的部分,它處理抽取、轉換、加載各種對數據行操作。 轉換包含一個或者多個步驟,如讀取文件、過濾數據行、數據清洗或將數據加載到數據庫。 轉換中的步驟通過 跳(hop)來鏈接,跳定義一個單向通道,允許數據從一個步驟向另一個步驟流動。

數據流:在kettle 中,數據的單位是行,數據流就是數據行從一個步驟到另一個步驟的移動,一個數據行是零到多個字段的集                    合。數據流也被稱爲記錄流。

step 步驟: 步驟(控件)是轉換中的基本組成部分;

          步驟的關鍵特性:

              1、步驟需要有一個整個轉換過程中唯一的名字;

              2、每個步驟都會讀、寫數據行(唯一例外的是“生成記錄”步驟,該步驟只寫數據);

              3、 步驟將數據寫到與之相連的一個或多個輸出跳,再傳送到跳的另一端的步驟;

              4、 大多數的步驟都可以有多個輸出跳。一個步驟的數據發送可以被設置爲分發和複製,分發是目標步驟輪流接收記                          錄,複製是所有的記錄被同時發送到所有的目標步驟。

 

hop跳:就是步驟之間帶箭頭的連線,眺定義了步驟之間的數據通路。跳實際是兩個步驟之間的被稱爲——行集的數據緩存,在                流程運行過程中數據會先往hop中寫。當行集滿了,向行集數據寫入數據就會停止,知道行集裏又有了空間。當行集空                了,從行集讀取數據的步驟會停止,直到行集裏又有了可讀的數據

kettle中數據行中數據類型:

              1 String  字符類型數據

              2 Number 雙精度浮點數

              3 Integer 帶符號長整型(64位)

              4 BigNumber 任意精度數據

              5 Date 帶毫秒精度的日期時間值

              6 Boolean 取值爲true和false的布爾值

              7 Binary  二進制字段可以包含圖像、聲音、視頻及其他類型的二進制數據

       

數據行——元數據:

             

連接數據庫

 

 

 

 

 

問題:

    鏈接數據庫報錯:

              

錯誤連接數據庫 [localtest] : org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database

Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the 'MySQL' driver (jar file) is installed.
org.gjt.mm.mysql.Driver


org.pentaho.di.core.exception.KettleDatabaseException: 
Error occurred while trying to connect to the database

Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the 'MySQL' driver (jar file) is installed.
org.gjt.mm.mysql.Driver


	at org.pentaho.di.core.database.Database.normalConnect(Database.java:477)
	at org.pentaho.di.core.database.Database.connect(Database.java:373)
	at org.pentaho.di.core.database.Database.connect(Database.java:344)
	at org.pentaho.di.core.database.Database.connect(Database.java:334)
	at org.pentaho.di.core.database.DatabaseFactory.getConnectionTestReport(DatabaseFactory.java:83)
	at org.pentaho.di.core.database.DatabaseFactory.getConnectionTestResults(DatabaseFactory.java:112)
	at org.pentaho.di.core.database.DatabaseMeta.testConnectionSuccess(DatabaseMeta.java:2843)
	at org.pentaho.ui.database.event.DataHandler.testDatabaseConnection(DataHandler.java:631)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.pentaho.ui.xul.impl.AbstractXulDomContainer.invoke(AbstractXulDomContainer.java:313)
	at org.pentaho.ui.xul.impl.AbstractXulComponent.invoke(AbstractXulComponent.java:157)
	at org.pentaho.ui.xul.impl.AbstractXulComponent.invoke(AbstractXulComponent.java:141)
	at org.pentaho.ui.xul.swt.tags.SwtButton.access$500(SwtButton.java:43)
	at org.pentaho.ui.xul.swt.tags.SwtButton$4.widgetSelected(SwtButton.java:137)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:820)
	at org.eclipse.jface.window.Window.open(Window.java:796)
	at org.pentaho.di.ui.xul.KettleDialog.show(KettleDialog.java:89)
	at org.pentaho.di.ui.xul.KettleDialog.show(KettleDialog.java:56)
	at org.pentaho.di.ui.core.database.dialog.XulDatabaseDialog.open(XulDatabaseDialog.java:117)
	at org.pentaho.di.ui.core.database.dialog.DatabaseDialog.open(DatabaseDialog.java:61)
	at org.pentaho.di.ui.repo.controller.RepositoryConnectController.lambda$createConnection$1(RepositoryConnectController.java:136)
	at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
	at org.pentaho.di.ui.repo.dialog.RepositoryDialog.open(RepositoryDialog.java:96)
	at org.pentaho.di.ui.repo.dialog.RepositoryDialog.open(RepositoryDialog.java:77)
	at org.pentaho.di.ui.repo.dialog.RepositoryDialog.open(RepositoryDialog.java:73)
	at org.pentaho.di.ui.repo.dialog.RepositoryDialog.openCreation(RepositoryDialog.java:110)
	at org.pentaho.di.ui.repo.menu.RepositoryConnectMenu$1.widgetSelected(RepositoryConnectMenu.java:122)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Widget.sendEvent(Unknown Source)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Unknown Source)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
	at org.pentaho.di.ui.spoon.Spoon.readAndDispatch(Spoon.java:1384)
	at org.pentaho.di.ui.spoon.Spoon.waitForDispose(Spoon.java:7949)
	at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9331)
	at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:710)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
Caused by: org.pentaho.di.core.exception.KettleDatabaseException: 
Driver class 'org.gjt.mm.mysql.Driver' could not be found, make sure the 'MySQL' driver (jar file) is installed.
org.gjt.mm.mysql.Driver

	at org.pentaho.di.core.database.Database.connectUsingClass(Database.java:520)
	at org.pentaho.di.core.database.Database.normalConnect(Database.java:461)
	... 53 more
Caused by: java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
	at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at org.pentaho.di.core.database.Database.connectUsingClass(Database.java:495)
	... 54 more

主機名       : localhost
端口           : 3306
數據庫名:test

配置數據庫鏈接成功後需要在kettle上登錄

***這裏的 user name 和 password 都是默認的admin,不是數據庫鏈接的用戶名和密碼

登錄成功後可以在操作區看到如下圖:

   

 

原來test數據庫中就只有紅框內的,連接後會多很多表

 

kettle的連接組件

  

 

  Multiway merge join:

  合併記錄:

 排序記錄:

 記錄關聯(笛卡爾輸出):

 記錄集連接:

單表輸入輸出

 

創建數據庫的表連接輸入輸出 數據庫間的輸入輸出,可以是同類型數據庫之間的數據抽取和轉換比如oracle到oracle的數據抽取,也可以是不同數據庫之間的抽取,例如mysql到oracle。先來一個簡單的示例,我在mysql數據庫中新建了幾張表有數據,在oracle只有相同的表結構,把mysql中的數據抽取到oracle的數據中。

 

 

從轉換中的【輸入】中拖出一個 表輸入 ,從【輸出】中拖出一個表輸出,用連接線連起來,然後配置表的數據庫鏈接。

 

 

 

 

 

 

 

點擊運行就可以運行成功:

 

 

 

多表合併輸出

  兩表合併-使用Multiway merge join:

 

 

 

排序相反的情況:

在兩表合併過程中有幾點需要注意的內容:

         1  有時需要多執行幾次(這個是我自己總結的,不知道對不對,因爲相同的配置我執行一次報錯,在第二次就成功了)

         2  執行成功後,去數據庫裏驗證數據,需要稍等下,不要因爲看不到就認爲沒成功

         3 排序 如果需要正確全量數據,就需要保持排序一致,要麼都是升序要麼都是降序

兩表合併-使用記錄集連接

  錯誤示例:

   

 

有人可能會有疑問,拿的到的數據是正確的,又怎麼能說上面示例是錯誤的呢。這種屬於特殊情況,這種情況是我的兩張源表都是升序的排列方式,排序保持了一致。所以得到的結果跟在過程中給兩張表添加了排序組件是一樣的效果,爲了驗證,把teacher表中部分數據調整了順序。得到的測試結果是:

 

 

看到這應該瞭解了。這種錯誤示例能順利執行的,執行過程中不會報錯,但是有可能得到的數據結果不是預期的結果

正確的示例:

    

數據庫執行結果:

   

 

三表連接:

 三表連接跟兩表連接思想一致

 

 

我想根據學生id排序,看着順眼點

 

kettle的操作暫時停止

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章