當前位置:首頁 » 數據倉庫 » kettle連接資料庫連接池
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

kettle連接資料庫連接池

發布時間: 2022-08-07 22:29:49

① kettle怎麼鏈接資料庫 求步驟 新手不懂 詳細點

你用的是kettle的新版嗎?如果是的話你在表輸入里選擇資料庫連接後,假如獲取不到表信息,自己寫select語句試試。

② 我能不能給kettle一個資料庫連接的配置文件,讓

一》文件資源庫配置

1. 建立文件資源庫:點擊工具->資源庫->連接資源庫菜單

使用文件資源庫不需要用戶名和密碼,如果沒有資源庫可以點擊右上角的"+"新建資源庫,如下圖:

第一種方式為建立資料庫的資源庫,本例選擇使用文件資源庫,選擇確定後會要求選擇文件資源庫的路徑,並給文件資源庫設置一個ID和名稱

完了以後可以查看資料庫中的表,比如r_transformation,r_user,連接這個資源庫可以用默認的帳號admin/admin然後可以在kettle裡面創建一個新的轉換,保存以後可以在資料庫中查看。'

③ kettle怎麼連接mysql

運行kettle 後,會顯示資源庫鏈接窗口,如果沒有資源庫就創建一個。
kettle有兩種資源庫:一種是文件資源庫,可以指定磁碟的某個文件件;一種是資料庫資源庫,在」資料庫信息「窗口中,「新建」 指定資料庫主機名,資料庫名,用戶名和密碼就可以新建一個資源庫,「創建或更新」可以將kettle必須的表自動創建到資料庫中。
登錄可以用 admin/admin

④ kettle用的是什麼資料庫連接池

連接池是被j2ee伺服器打開和維護的對應1、2、4的JDBC驅動程序連接池一般比直接連接更有優越性因為它提高了性能的同時還保存了寶貴的資源。打開資料庫連接時CPU和網路的重要任務,因此,在整個應用程序的使用過程當中重復的打開直接連接將

⑤ 什麼原因會導致kettle表輸出到資料庫很慢

1.
單數據源輸入,直接用sql
做連接
2.
多數據源輸入,(可能是文本或是兩個以上源資料庫),用database
join
操作.
3.
三個表以上的多欄位輸出.
2.
Kettle的資料庫連接模式
Kettle的資料庫連接是一個步驟裡面控制一個單資料庫連接,所以kettle的連接有資料庫連接池,你可以在指定的資料庫連接裡面指定一開始連接池裡面放多少個資料庫連接,在創建資料庫連接的時候就有Pooling
選項卡,裡面可以指定最大連接數和初始連接數,這可以一定程度上提高速度.

⑥ kettle怎樣連接資料庫連接

java調用kettle資料庫類型資源庫中的ktr此問題在1個月前或許已經接觸,單是一直木有怎麼用到,就被耽擱至今;問題的解決要來源於網路,其實我還想說問題的解決的是要靠我們自己的思想,不過多的言情,我們接下來直接進入主題吧!環境:kettle-spoon4.2.0,oracle11g,myeclipse6.5,sqlserver2008前提:在kettle圖形界面spoon裡面已經做好了一個ktr轉換模型,此時我的ktr信息如下圖:Step1:在myeclipse創建project,導入kettle集成所需要的包Step2:重點解析與code源碼//定義ktr名字privatestaticStringtransName="test1";//初始化kettle環境KettleEnvironment.init();//創建資源庫對象,此時的對象還是一個空對象=newKettleDatabaseRepository();//創建資源庫資料庫對象,類似我們在spoon裡面創建資源庫DatabaseMetadataMeta=newDatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");//資源庫元對象,名稱參數,id參數,描述等可以隨便定義=("enfo_bi","enfo_bi","kingdescription",dataMeta);//給資源庫賦值repository.init(kettleDatabaseMeta);//連接資源庫repository.connect("admin","admin");//根據變數查找到模型所在的目錄對象=repository.findDirectory("/enfo_worker/wxj");//創建ktr元對象TransMetatransformationMeta=((Repository)repository).loadTransformation(transName,directory,null,true,null);//創建ktrTranstrans=newTrans(transformationMeta);//執行ktrtrans.execute(null);//等待執行完畢trans.waitUntilFinished();上面的兩個步驟才可以確定是資源庫中的那個路徑下的ktr和我們用命令執行一樣的-dir,-tran-job附上源碼:packagekettle;importorg.pentaho.di.core.KettleEnvironment;importorg.pentaho.di.core.database.DatabaseMeta;importorg.pentaho.di.core.exception.KettleException;importorg.pentaho.di.repository.Repository;importorg.pentaho.di.repository.RepositoryDirectoryInterface;importorg.pentaho.di.repository.kdr.KettleDatabaseRepository;importorg.pentaho.di.repository.kdr.KettleDatabaseRepositoryMeta;importorg.pentaho.di.trans.Trans;importorg.pentaho.di.trans.TransMeta;/***Title:java調用kettle4.2資料庫型資料庫中的轉換*Description:*Copyright:Copyright()2012*/{privatestaticStringtransName="test1";publicstaticvoidmain(String[]args){try{//初始化kettle環境KettleEnvironment.init();//創建資源庫對象,此時的對象還是一個空對象=newKettleDatabaseRepository();//創建資源庫資料庫對象,類似我們在spoon裡面創建資源庫DatabaseMetadataMeta=newDatabaseMeta("enfo_bi","Oracle","Native","ip","sid","port","username","password");//資源庫元對象,名稱參數,id參數,描述等可以隨便定義=("enfo_bi","enfo_bi","kingdescription",dataMeta);//給資源庫賦值repository.init(kettleDatabaseMeta);//連接資源庫repository.connect("admin","admin");//根據變數查找到模型所在的目錄對象,此步驟很重要。=repository.findDirectory("/enfo_worker/wxj");//創建ktr元對象TransMetatransformationMeta=((Repository)repository).loadTransformation(transName,directory,null,true,null);//創建ktrTranstrans=newTrans(transformationMeta);//執行ktrtrans.execute(null);//等待執行完畢trans.waitUntilFinished();if(trans.getErrors()>0){System.err.println("TransformationrunFailure!");}else{System.out.println("Transformationrunsuccessfully!");}}catch(KettleExceptione){e.printStackTrace();}}}

⑦ kettle設置了一個變數,執行第一次的時候提示出現不支持的sql92,然後再運行一次job變數就正常使用了

1. Join
我得到A 數據流(不管是基於文件或資料庫),A包含field1 , field2 , field3 欄位,然後我還有一個B數據流,B包含field4 , field5 , field6 , 我現在想把它們 『加』 起來, 應該怎麼樣做.
這是新手最容易犯錯的一個地方,A數據流跟B數據流能夠Join,肯定是它們包含join key ,join key 可以是一個欄位也可以是多個欄位。如果兩個數據流沒有join key ,那麼它們就是在做笛卡爾積,一般很少會這樣。比如你現在需要列出一個員工的姓名和他所在部門的姓名,如果這是在同一個資料庫,大家都知道會在一個sql 裡面加上where 限定條件,但是如果員工表和部門表在兩個不同的數據流裡面,尤其是數據源的來源是多個資料庫的情況,我們一般是要使用Database Join 操作,然後用兩個database table input 來表示輸入流,一個輸入是部門表的姓名,另一個是員工表的姓名,然後我們認為這兩個表就可以 」Join」 了,我們需要的輸出的確是這兩個欄位,但是這兩個欄位的輸出並不代表只需要這兩個欄位的輸入,它們之間肯定是需要一個約束關系存在的。另外,無論是在做 Join , Merge , Update , Delete 這些常規操作的時候,都是先需要做一個compare 操作的,這個compare 操作都是針對compare key 的,無論兩個表結構是不是一樣的,比如employee 表和department 表,它們比較的依據就是employee 的外鍵department_id , 沒有這個compare key 這兩個表是不可能連接的起來的.. 對於兩個表可能還有人知道是直接sql 來做連接,如果是多個輸入數據源,然後是三個表,有人就開始迷茫了,A表一個欄位,B表一個欄位,C表一個欄位,然後就連Join操作都沒有,直接 database table output , 然後開始報錯,報完錯就到處找高手問,他們的資料庫原理老師已經在吐血了。如果是三個表連接,一個sql 不能搞定,就需要先兩個表兩個表的連接,通過兩次compare key 連接之後得到你的輸出,記住,你的輸出並不能代表你的輸入. 下面總結一下:
1. 單數據源輸入,直接用sql 做連接
2. 多數據源輸入,(可能是文本或是兩個以上源資料庫),用database join 操作.
3. 三個表以上的多欄位輸出.
2. Kettle的資料庫連接模式
Kettle的資料庫連接是一個步驟裡面控制一個單資料庫連接,所以kettle的連接有資料庫連接池,你可以在指定的資料庫連接裡面指定一開始連接池裡面放多少個資料庫連接,在創建資料庫連接的時候就有Pooling 選項卡,裡面可以指定最大連接數和初始連接數,這可以一定程度上提高速度.
3. transaction
我想在步驟A執行一個操作(更新或者插入),然後在經過若干個步驟之後,如果我發現某一個條件成立,我就提交所有的操作,如果失敗,我就回滾,kettle提供這種事務性的操作嗎?
Kettle 裡面是沒有所謂事務的概念的,每個步驟都是自己管理自己的連接的,在這個步驟開始的時候打開資料庫連接,在結束的時候關閉資料庫連接,一個步驟是肯定不會跨session的(資料庫裡面的session), 另外,由於kettle是並行執行的,所以不可能把一個資料庫連接打開很長時間不放,這樣可能會造成鎖出現,雖然不一定是死鎖,但是對性能還是影響太大了。ETL中的事務對性能影響也很大,所以不應該設計一種依賴與事務方式的ETL執行順序,畢竟這不是OLTP,因為你可能一次需要提交的數據量是幾百 GB都有可能,任何一種資料庫維持一個幾百GB的回滾段性能都是會不大幅下降的.
4. 我真的需要transaction 但又不想要一個很復雜的設計,能不能提供一個簡單一點的方式
Kettle 在3.0.2GA版中將推出一種新功能,在一個table output 步驟中有一個Miscellaneous 選項卡,其中有一個Use unique connections 的選項,如果你選中的話就可以得到一個transaction 的簡單版,
由於是使用的單資料庫連接,所以可以有錯誤的時候回滾事務,不過要提醒一點是這種方式是以犧牲非常大的性能為前提條件的,對於太大的數據量是不適合的(個人仍然不建議使用這種方式)
5. temporary 表如何使用
我要在ETL過程中創建一個中間表,當某個條件成立的時候,我要把中間表的數據進行轉換,當另一條件成立的時候我要對中間表進行另一個操作,我想使用資料庫的臨時表來操作,應該用什麼步驟。
首先從temp 表的生命周期來分,temp分為事務臨時表和會話臨時表,前面已經解釋過了,kettle是沒有所謂事務的概念的,所以自然也沒有所謂的事務臨時表。 Kettle的每個步驟管理自己的資料庫連接,連接一結束,kettle也就自然丟掉了這個連接的session 的handler , 沒有辦法可以在其他步驟拿回這個session 的handler , 所以也就不能使用所謂的會話臨時表,當你嘗試再開一個連接的時候,你可以連上這個臨時表,但是你想要的臨時表裡面的數據都已經是空的(數據不一定被清除了,但是你連不上了),所以不要設計一個需要使用臨時表的轉換
之所以會使用臨時表,其實跟需要 」事務」 特性有一點類似,都是希望在ETL過程中提供一種緩沖。臨時表很多時候都不是某一個源表的全部數據的鏡像,很多時候臨時表都是很小一部分結果集,可能經過了某種計算過程,你需要臨時表無非是基於下面三個特性:
1. 表結構固定,用一個固定的表來接受一部分數據。
2. 每次連接的時候裡面沒有數據。你希望它接受數據,但是不保存,每次都好像執行了truncate table 操作一樣
3. 不同的時候連接臨時表用同一個名字,你不想使用多個連接的時候用類似與temp1 , temp2 , temp3 , temp4 這種名字,應為它們表結構一樣。
既然臨時表不能用,應該如何設計ETL過程呢?(可以用某種詭異的操作搞出臨時表,不過不建議這樣做罷了)
如果你的ETL過程比較的單線程性,也就是你清楚的知道同一時間只有一個這樣的表需要,你可以創建一個普通的表,每次連接的時候都執行truncate 操作,不論是通過table output 的truncate table 選項,還是通過手工執行truncate table sql 語句(在execute sql script 步驟)都可以達到目的(基於上面的1,2 特性)
如果你的ETL操作比較的多線程性,同一時間可能需要多個表結構一樣並且裡面都是為空的表(基於上面1,2,3特性),你可以創建一個 「字元串+序列」 的模式,每次需要的時候,就創建這樣的表,用完之後就刪除,因為你自己不一定知道你需要多少個這種類型的表,所以刪除會比truncate 好一些。
下面舉個例子怎麼創建這種表:
你可以使用某種約定的表名比如department_temp 作為department 的臨時表。或者
把argument 傳到表名,使用 department_${argument} 的語法,
如果你需要多個這種表,使用一個sequence 操作+execute sql script 操作,execute sql script 就下面這種模式
Create table_? (…………..)
在表的名字上加參數,前面接受一個sequence 或類似的輸入操作.
需要注意的是這種參數表名包括database table input 或者execute sql script ,只要是參數作為表名的情況前面的輸入不能是從資料庫來的,應為沒有辦法執行這種preparedStatement 語句,從資料庫來的值後面的操作是 「值操作」 ,而不是字元串替換,只有argument 或者sequence 操作當作參數才是字元串替換. (這一點官方FAQ也有提到)

⑧ 如何用Kettle鏈接Kingbase資料庫

方法/步驟

  • 安裝包下載後解壓,運行setup.bat批處理文件,彈出黑框,自動載入安裝程序。