⑴ kettle抽取linux下csv文件到Windows下資料庫
linux 下,可以使用cli程序把csv文件導入到資料庫。具體代碼如下:
$ORACLE_HOME/bin/sqlplus-Susername/password@instanceName>/dev/null2>&1<<!!
#對sqlplus作一些設置,使之只輸出我們需要的文本
setechooff
setpagesize0
setverifyoff
setfeedbackoff
settermoutoff
setlinesize3000
settrimspoolon
#查詢輸出到臨時文件
spool/tmp/some_tmp.csv
#select語句
selectcolumn1||','||column2||','||column3....
fromsome_tablewherecondition
spooloff
#這里可以添加多個查詢,且每個查詢可輸出到不同的文件,如下面注釋
#spool/tmp/some_tmp.csv
#selectcolumn1||','||column2||','||column3....
#fromsome_tablewherecondition
#spooloff
setmarkupHTMLoff
quit
!!
#計算記錄總行數,如果是0則不發郵件
NUM=`cat/tmp/some_tmp.csv|wc-l`
if[$NUM-gt0]
then
#先寫excel的每列的title
echo'Title_Of_Column1,Title_Of_Column2,....Title_Of_ColumnN'>/tmp/attachement.csv
#數據正文
cat/tmp/some_tmp.csv>>/tmp/attachement.csv
#發郵件
(
echo"From:[email protected]"
echo"To:[email protected]"
echo"MIME-Version:1.0"
echo"Content-Type:multipart/mixed;"
echo'boundary="A_Boundary_Name_You_Can_Change_It"'
echo"Subject:Subject"
echo""
echo""
#附件分隔符,上面的boundary前面加--
echo"--A_Boundary_Name_You_Can_Change_It"
echo'Content-Transfer-Encoding:x-uuencode'
echo'Content-Type:text/csv;'
echo'name="attachement.csv"'
echo'Content-Disposition:attachment;'
echo'filename="attachement.csv"'
echo""
uuencode/tmp/attachement.csvattachement.csv
echo"--A_Boundary_Name_You_Can_Change_It"
#附件結束
)|mailx-t
fi
#刪除臨時文件
rm-f/tmp/*.csv
exit0
⑵ kettle怎麼建立資料庫連接
下載pdi-ce-4.4.0-stable.zip,解壓到文件夾,打開data-integration中的Spoon.bat
2
出現歡迎界面後來到Repository Connection窗口,選擇建立一個新的repository,隨後出現「資源庫信息」窗口:
在「資源庫信息」窗口中選擇新建一個資料庫連接,彈出「Database Connection」窗口:
在其中輸入Connection Name, Host Name, Database Name, Port Number, User Name,Password信息即可建立連接,完成之後在Repository Connection窗口以admin用戶名登陸。
新建一個名為cscgTransTest的Transformation,從「核心對象」中將兩個「表輸入」和一個「插入/更新」拖入到cscgTransTest中,並建立它們之間的連接,如下圖所示:
在cscgTransTest中建立一個新的資料庫連接ttt,通過表輸入「max_createtime」從目標資料庫ttt中獲取某個表中最新數據的建立時間:
SELECT max(trunc(createtime)) FROMumdata.toeventmedia
在cscgTransTest中建立一個新的資料庫連接testdb,以表輸入「max_createtime」的查詢結果替代表輸入「umdata.toeventmedia」中的變數,執行SQL語句從資料庫testdb中獲取需要插入或者更新到ttt資料庫的數據
SELECT * FROMumdata.toeventmedia where trunc(createtime) >= trunc(?)
在「插入/更新」中選擇「資料庫連接」、「目標模式」、「目標表」等信息,「用來查詢的關鍵字」中的欄位用來查詢某條記錄是否在目標表中存在,不存在則插入記錄;如果存在,則繼續比較其他欄位是否與流里的欄位值相同,如果相同則不執行任何操作,如果不同則更新「更新欄位」中所列欄位。
「用來查詢的關鍵字」所列欄位是該表的primarykey,從而可以唯一標識一條記錄。
分別為每一個表建立一個如上模式的轉換步驟。
新建一個名為「cscgJobTest」的Job,在核心對象中將「START」和「Transformation」拖入cscgJobTest中,並建立兩者之間的連接。
選中START中的「重復執行」,類型為「不需要定時」;在Transformation中將轉換名設置為之前建立的「cscgTransTest」.
點擊「Run this Job」運行。Job和Transformation的執行結果如如下: