由於有個平常提數,工做日天天都要從數據庫中提取數據,轉換爲excel,再以郵件的形式發給用戶。mysql
恰好近期同事在研究使用kettle自動提數且完成郵件的發送,以爲很實用又挺有意思的就學了一下這個技能~sql
首先咱們須要新建 轉換 數據庫
轉換: 能夠將數據從數據庫中提取到excel中 oracle
而後咱們若是想要定時提取數據的話,能夠新建 做業測試
做業: 能夠定時執行轉換任務,而後還能夠將發送郵件耶~ (不過這個技能我還不是很熟悉,等我熟悉了再更新嘻嘻)lua
一 、 新建轉換3d
1.點擊 + 號 ,也就是新建 ,而後選擇 轉換excel
2. 從 核心對象 視圖切換爲 主對象樹 , 而後開始創建咱們的數據庫鏈接orm
雙擊 DB鏈接,會出現下圖標記的 3 彈窗server
填寫數據庫鏈接信息,我這裏選擇鏈接oracle數據庫,必要填寫的信息爲紅色標記框所標記的 數據庫ip 數據庫名 端口號 用戶名 密碼
3.數據庫信息填寫完後咱們能夠點擊測試按鈕,看看是否能正常鏈接(提示爲 正確鏈接到數據庫【test】,表示信息填寫沒有問題)
4. 切換視圖: 主對象樹 切換到 核心對象,咱們開始設立咱們的輸入與輸出
5. 輸入 : 咱們 從輸入的子菜單中選擇 表輸入
雙擊 表輸入,會在右側出現 表輸入圖標
雙擊右側表輸入圖標,再次出現 下圖標記4出現的彈窗
6. 在彈窗中,咱們開始定義輸入相關信息啦
關於sql語句,咱們還有一點須要注意,就是日期形式的數據須要定義一下,否則導出的數據就會數值類型啦(49165..相似的)
oracle: to_char('2019-05-05','yyyy-MM-dd')
mysql: DATE_FORMAT('2019-05-05',''%Y-%m-%d')
7. 輸入定義好後,咱們開始定義輸出啦。 這裏咱們選擇以excel的形式輸出數據
選擇核心對象下的 輸出,雙擊輸出下的子菜單 Microsoft Excel輸出 ,會出現右側的輸出圖標
雙擊右側的輸出圖標,出現右側 5標記的彈窗信息
8.定義詳細的輸出
選定輸出文件的位置,若是不寫絕對路徑則會輸出在 kettle啓動文件 Sqoon.bat的統計目錄下
下面記得選中Excel 2007 and above
最後點擊肯定
9.點擊執行按鈕,而後就根據提示選擇 保存
10. 執行轉換
11.執行成功後,咱們回到桌面就會看到剛剛保存的文件啦~
2、新建 做業
1.點擊 + 號,而後選擇 做業
2.選擇通用, START (雙擊,出現右側開始圖標)
3.在 START裏面定義 怎麼執行(我這裏定義爲天天9點執行)
4.雙擊通用下的 轉換
5.配置轉換相關信息
選中咱們剛剛配置好的轉換信息(保存位置看你本身以前保存在哪裏哦,我是放在了桌面~) ,最後選擇肯定便可
6.點擊執行,會要求咱們先保存這次編輯的 做業信息 ,以下圖
7. 保存好後,咱們能夠再次啓動,運行啦~ (其實還能夠導入文件 test.kjb)
最後提供一個發送郵件的 testzip.kjb 示例 (可直接使用kettle打開,更改郵件服務配置信息便可運行)
<?xml version="1.0" encoding="UTF-8"?> <job> <name>testzip</name> <description /> <extended_description /> <job_version /> <directory>/</directory> <created_user>-</created_user> <created_date>2019/06/17 11:35:43.098</created_date> <modified_user>-</modified_user> <modified_date>2019/06/17 11:35:43.098</modified_date> <parameters> </parameters> <slaveservers> </slaveservers> <job-log-table> <connection /> <schema /> <table /> <size_limit_lines /> <interval /> <timeout_days /> <field> <id>ID_JOB</id> <enabled>Y</enabled> <name>ID_JOB</name> </field> <field> <id>CHANNEL_ID</id> <enabled>Y</enabled> <name>CHANNEL_ID</name> </field> <field> <id>JOBNAME</id> <enabled>Y</enabled> <name>JOBNAME</name> </field> <field> <id>STATUS</id> <enabled>Y</enabled> <name>STATUS</name> </field> <field> <id>LINES_READ</id> <enabled>Y</enabled> <name>LINES_READ</name> </field> <field> <id>LINES_WRITTEN</id> <enabled>Y</enabled> <name>LINES_WRITTEN</name> </field> <field> <id>LINES_UPDATED</id> <enabled>Y</enabled> <name>LINES_UPDATED</name> </field> <field> <id>LINES_INPUT</id> <enabled>Y</enabled> <name>LINES_INPUT</name> </field> <field> <id>LINES_OUTPUT</id> <enabled>Y</enabled> <name>LINES_OUTPUT</name> </field> <field> <id>LINES_REJECTED</id> <enabled>Y</enabled> <name>LINES_REJECTED</name> </field> <field> <id>ERRORS</id> <enabled>Y</enabled> <name>ERRORS</name> </field> <field> <id>STARTDATE</id> <enabled>Y</enabled> <name>STARTDATE</name> </field> <field> <id>ENDDATE</id> <enabled>Y</enabled> <name>ENDDATE</name> </field> <field> <id>LOGDATE</id> <enabled>Y</enabled> <name>LOGDATE</name> </field> <field> <id>DEPDATE</id> <enabled>Y</enabled> <name>DEPDATE</name> </field> <field> <id>REPLAYDATE</id> <enabled>Y</enabled> <name>REPLAYDATE</name> </field> <field> <id>LOG_FIELD</id> <enabled>Y</enabled> <name>LOG_FIELD</name> </field> <field> <id>EXECUTING_SERVER</id> <enabled>N</enabled> <name>EXECUTING_SERVER</name> </field> <field> <id>EXECUTING_USER</id> <enabled>N</enabled> <name>EXECUTING_USER</name> </field> <field> <id>START_JOB_ENTRY</id> <enabled>N</enabled> <name>START_JOB_ENTRY</name> </field> <field> <id>CLIENT</id> <enabled>N</enabled> <name>CLIENT</name> </field> </job-log-table> <jobentry-log-table> <connection /> <schema /> <table /> <timeout_days /> <field> <id>ID_BATCH</id> <enabled>Y</enabled> <name>ID_BATCH</name> </field> <field> <id>CHANNEL_ID</id> <enabled>Y</enabled> <name>CHANNEL_ID</name> </field> <field> <id>LOG_DATE</id> <enabled>Y</enabled> <name>LOG_DATE</name> </field> <field> <id>JOBNAME</id> <enabled>Y</enabled> <name>TRANSNAME</name> </field> <field> <id>JOBENTRYNAME</id> <enabled>Y</enabled> <name>STEPNAME</name> </field> <field> <id>LINES_READ</id> <enabled>Y</enabled> <name>LINES_READ</name> </field> <field> <id>LINES_WRITTEN</id> <enabled>Y</enabled> <name>LINES_WRITTEN</name> </field> <field> <id>LINES_UPDATED</id> <enabled>Y</enabled> <name>LINES_UPDATED</name> </field> <field> <id>LINES_INPUT</id> <enabled>Y</enabled> <name>LINES_INPUT</name> </field> <field> <id>LINES_OUTPUT</id> <enabled>Y</enabled> <name>LINES_OUTPUT</name> </field> <field> <id>LINES_REJECTED</id> <enabled>Y</enabled> <name>LINES_REJECTED</name> </field> <field> <id>ERRORS</id> <enabled>Y</enabled> <name>ERRORS</name> </field> <field> <id>RESULT</id> <enabled>Y</enabled> <name>RESULT</name> </field> <field> <id>NR_RESULT_ROWS</id> <enabled>Y</enabled> <name>NR_RESULT_ROWS</name> </field> <field> <id>NR_RESULT_FILES</id> <enabled>Y</enabled> <name>NR_RESULT_FILES</name> </field> <field> <id>LOG_FIELD</id> <enabled>N</enabled> <name>LOG_FIELD</name> </field> <field> <id>COPY_NR</id> <enabled>N</enabled> <name>COPY_NR</name> </field> </jobentry-log-table> <channel-log-table> <connection /> <schema /> <table /> <timeout_days /> <field> <id>ID_BATCH</id> <enabled>Y</enabled> <name>ID_BATCH</name> </field> <field> <id>CHANNEL_ID</id> <enabled>Y</enabled> <name>CHANNEL_ID</name> </field> <field> <id>LOG_DATE</id> <enabled>Y</enabled> <name>LOG_DATE</name> </field> <field> <id>LOGGING_OBJECT_TYPE</id> <enabled>Y</enabled> <name>LOGGING_OBJECT_TYPE</name> </field> <field> <id>OBJECT_NAME</id> <enabled>Y</enabled> <name>OBJECT_NAME</name> </field> <field> <id>OBJECT_COPY</id> <enabled>Y</enabled> <name>OBJECT_COPY</name> </field> <field> <id>REPOSITORY_DIRECTORY</id> <enabled>Y</enabled> <name>REPOSITORY_DIRECTORY</name> </field> <field> <id>FILENAME</id> <enabled>Y</enabled> <name>FILENAME</name> </field> <field> <id>OBJECT_ID</id> <enabled>Y</enabled> <name>OBJECT_ID</name> </field> <field> <id>OBJECT_REVISION</id> <enabled>Y</enabled> <name>OBJECT_REVISION</name> </field> <field> <id>PARENT_CHANNEL_ID</id> <enabled>Y</enabled> <name>PARENT_CHANNEL_ID</name> </field> <field> <id>ROOT_CHANNEL_ID</id> <enabled>Y</enabled> <name>ROOT_CHANNEL_ID</name> </field> </channel-log-table> <pass_batchid>N</pass_batchid> <shared_objects_file /> <entries> <entry> <name>Zip 壓縮文件</name> <description /> <type>ZIP_FILE</type> <zipfilename>C:\Users\S0111\Desktop\最新運營中心KPI20190615.zip</zipfilename> <compressionrate>1</compressionrate> <ifzipfileexists>0</ifzipfileexists> <wildcard /> <wildcardexclude /> <sourcedirectory>D:\DEV_TOOLS\kettle\pdi-ce-7.1.0.0-12\data-integration\網上保單貸款2019-06-18.xlsx</sourcedirectory> <movetodirectory /> <afterzip>0</afterzip> <addfiletoresult>Y</addfiletoresult> <isfromprevious>N</isfromprevious> <createparentfolder>Y</createparentfolder> <adddate>N</adddate> <addtime>N</addtime> <SpecifyFormat>N</SpecifyFormat> <date_time_format>yyyy/MM/dd HH:mm:ss</date_time_format> <createMoveToDirectory>N</createMoveToDirectory> <include_subfolders>N</include_subfolders> <stored_source_path_depth>1</stored_source_path_depth> <parallel>N</parallel> <draw>Y</draw> <nr>0</nr> <xloc>368</xloc> <yloc>160</yloc> </entry> <entry> <name>START</name> <description /> <type>SPECIAL</type> <start>Y</start> <dummy>N</dummy> <repeat>N</repeat> <schedulerType>0</schedulerType> <intervalSeconds>0</intervalSeconds> <intervalMinutes>60</intervalMinutes> <hour>12</hour> <minutes>0</minutes> <weekDay>1</weekDay> <DayOfMonth>1</DayOfMonth> <parallel>N</parallel> <draw>Y</draw> <nr>0</nr> <xloc>192</xloc> <yloc>176</yloc> </entry> <entry> <name>添加文件到結果文件中</name> <description /> <type>ADD_RESULT_FILENAMES</type> <arg_from_previous>Y</arg_from_previous> <include_subfolders>N</include_subfolders> <delete_all_before>N</delete_all_before> <fields> <field> <name>C:\Users\Administrator\Desktop\報表平臺\kettle每週提數</name> <filemask>*.zip</filemask> </field> </fields> <parallel>N</parallel> <draw>Y</draw> <nr>0</nr> <xloc>528</xloc> <yloc>176</yloc> </entry> <entry> <name>發送郵件</name> <description /> <type>MAIL</type> <server>11.22.33.44</server> <port>25</port> <destination>duanfeixia@chinalife.com.hk</destination> <destinationCc /> <destinationBCc /> <replyto>xubo@chinalife.com.hk</replyto> <replytoname /> <subject>嗯嗯嗯嗯</subject> <include_date>N</include_date> <contact_person /> <contact_phone /> <comment>test mail</comment> <include_files>Y</include_files> <zip_files>N</zip_files> <zip_name /> <use_auth>N</use_auth> <use_secure_auth>N</use_secure_auth> <auth_user /> <auth_password>Encrypted </auth_password> <only_comment>Y</only_comment> <use_HTML>N</use_HTML> <use_Priority>N</use_Priority> <encoding>UTF-8</encoding> <priority>normal</priority> <importance>normal</importance> <sensitivity>normal</sensitivity> <secureconnectiontype>SSL</secureconnectiontype> <replyToAddresses /> <filetypes> <filetype>GENERAL</filetype> </filetypes> <embeddedimages> </embeddedimages> <parallel>N</parallel> <draw>Y</draw> <nr>0</nr> <xloc>672</xloc> <yloc>176</yloc> </entry> </entries> <hops> <hop> <from>START</from> <to>Zip 壓縮文件</to> <from_nr>0</from_nr> <to_nr>0</to_nr> <enabled>Y</enabled> <evaluation>Y</evaluation> <unconditional>Y</unconditional> </hop> <hop> <from>添加文件到結果文件中</from> <to>發送郵件</to> <from_nr>0</from_nr> <to_nr>0</to_nr> <enabled>Y</enabled> <evaluation>Y</evaluation> <unconditional>N</unconditional> </hop> <hop> <from>Zip 壓縮文件</from> <to>添加文件到結果文件中</to> <from_nr>0</from_nr> <to_nr>0</to_nr> <enabled>Y</enabled> <evaluation>Y</evaluation> <unconditional>N</unconditional> </hop> </hops> <notepads> </notepads> </job>