前言
現在的數據庫種類越來越多,數據庫備份的格式也越來越復雜,所以數據格式化一直是一個老生常談的問題。據庫備份文件格式那么多,既有SQL的,也有BAK的,還有TXT的等。數據庫種類也有很多,MySQL,Oracle,SQL server等,怎么對這些數據庫進行管理?昨天泄露access格式的數據庫,今天泄露了excel格式的數據庫,明天又泄露了SQL格式的數據庫。要格式化那么多種類的數據庫,壓力山大啊!搭建個本地的社工庫怎么那么復雜?
這里就要說到kettle。首先得說說Pentaho這個企業。Pentaho主要致力于大數據的分析,整理和管理,并且這家公司開發出來的工具是開源的!沒錯,就是開源的。任何人都可以查看這個項目的源代碼,并且對其進行更改和研究。這家公司開發了很多管理工具或者框架,最為出名的就是kettle了。Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,數據抽取高效穩定。ELT的全稱為Extraction, Transformation Loading,其中文解釋為提取,轉換和加載。Kettle這個工具里面有SPOON,PAN,CHEF,Encr和KITCHEN這么五個基本組建。
SPOON 允許你通過圖形界面來設計ETL轉換過程(Transformation)。
PAN 允許你批量運行由Spoon設計的ETL轉換 (例如使用一個時間調度器)。Pan是一個后臺執行的程序,沒有圖形界面。
CHEF 允許你創建任務(Job)。 任務通過允許每個轉換,任務,腳本等等,更有利于自動化更新數據倉庫的復雜工作。任務通過允許每個轉換,任務,腳本等等。任務將會被檢查,看看是否正確地運行了。
KITCHEN 允許你批量使用由Chef設計的任務 (例如使用一個時間調度器)。KITCHEN也是一個后臺運行的程序。
Encr 此腳本是用來加密連接數據庫密碼與集群時使用的密碼
今天我們主要講的是SPOON,這里會做一個基礎的講解,以便達到拋磚引玉的作用。
1.基本安裝
由于Kettle是由JAVA代碼所編寫的,所以大家要運行Kettle首先是下載安裝JDK并且設置好環境變量。Kettle的下載地址是“傳送門”。
下載完成后,你會得到一個RAR壓縮包,請對壓縮包進行解壓。
解壓完成后在文件更目錄內,你可以看到幾個bat文件和sh文件,這里就是kettle工具的打開的方式。
這里做個常識普及。
windows系統的用戶請用bat文件打開kettle
linux系統的用戶請用sh文件打開kettle
這里主要說的是kettle spoon的一個基本講解。運行spoon.bat或者spoon.sh后等待幾秒鐘就可以看到kettle spoon的基本界面了。
2.基本建模
新建作業
在開始對數據管理之前,我們需要新建一個作業。點擊文件,新建中的作業選項,產生出一個作業。
在核心對象這里,我們可以看到kettle spoon中非常主要的幾個基本功能和模塊。
數據輸入
數據庫的備份格式有很多,有bak,sql,txt,csv等等。這里需要對這些文件有一個基本的管理,這里就扯到了數據庫輸入模塊,我們得先把自己的輸入模塊建立好。下面這張圖是kettle spoon上幾個輸入的基本模塊。
這里對輸入模塊做個基本的操作教程,我們先來看看對數據庫備份文件怎么進行輸入的。鼠標左鍵單擊一個模塊拖動到作業方框內就可以對這個模塊進行編輯。
假設我要對一個txt格式的泄露數據庫進行入庫,那么首先應該查看的是字段的分隔符和限定符。
然后拖動一個文本文件輸入模塊到作業內。
雙擊這個模塊對其進行設置。
然后點擊瀏覽,選擇要導入的數據庫文件,然后點擊增加。
通過上圖已經知道了數據庫字段的分隔符,在內容處填寫好分隔符。這里除了分隔符的設置還可以設置文本顯示格式,限定符等等。
然后就是獲取table表格。在這個設置內,你還可以對table表的表名進行編輯。
在設置完成后,我們需要預覽一下整個table表,查看自己的設置是否正確。
當然,這里只是一個非常簡單的txt無加密備份的數據庫,KettleSpoon還提供Accesss,SQL,CSV等數據輸入格式,甚至還提供數據庫對數據庫輸入。比如你要把oracle數據庫中的數據輸入到mysql的數據庫中,你可能需要先把數據備份下來,整理好后在導入到mysql數據庫中。但是在kettle spoon中,你可以直接在數據流中進行傳輸,直接省去了中間的這一步。在表輸入模塊中可以使用這個功能。
數據加工
通過上面的步驟,已經成功的把數據輸入進來,但是我們還需要對數據進行整理。比如增加序列,增加字段,數據加密等。這里再繼續舉個例子。因為本地社工庫有海量的數據,所以就需要做數據索引。索引數據有個很關鍵的地方就是ID,每一條數據需要不同的ID進行索引,而且ID的值還不能是普通的int類型,必須是bigint類型。這里需要對海量的數據進行一個規范的整理和加工。
假設我的社工庫中已經有199條數據了,我需要對新的每條數據重新做一個ID序列,ID起始值為200,每條數據之間的ID值增加兩個數字。雖然感覺很復雜,但是kettle spoon卻可以很輕易的解決這個問題。
從轉換處拖出一個增加序列模塊到作業內,然后鼠標左鍵單擊文本文件輸入模塊,并且按住shift鍵不放,同時往任意方向上拖動鼠標,這個時候你會看到一條線。把它鏈接到增加序列模塊。
雙擊增加序列模塊進入到設置界面,在值的名稱那里設置字段名稱為newid。因為ID的起始值是200,所以起始值設置成200。因為每條數據之間的ID增加兩個數字,所以增長根據這里設置成2。最后點擊確定。
這樣一個增加序列的設置就完成了。當然這個例子只是一個非常簡單的功能,里面有很多數據處理的功能等著大家一一嘗試。
數據輸出
數據輸入也有了,加工步驟也有了,那么該對數據進行輸出了。在數據輸出的時候可能大家會對其有一些要求,比如我不想要某些字段,或者我想設置數據的格式等。這里kettle都可以幫助到你。Kettle甚至提供了多種數據輸出的模塊,大家可以查其輸出菜單。
這里還是繼續舉一下剛才的例子。假設新的數據我只要剛才的新生成的ID,Usename和password字段,其它的我都不要,并且數據要輸出到excel表格內,而且數據的字體是Arial,大小是10。
那么我們可以先建立一個excel輸出模塊,然后該模塊需要與之前的增加序列模塊進行連接。
隨后雙擊excel模塊進行設置。在瀏覽那里選擇excel的保存路徑。
然后在格式這里設置excel的字體格式等。
然后在字段這里先選擇獲取字段,然后刪除不想要的字段,并且對字段進行排序。
然后點擊左上角的開始即可開始對數據的輸出
下圖是整理后的數據。可以看到數據的ID從200開始,并且每條數據增加兩個數字。同時字段要求和字體格式要求都已經達到。因為我自己的excel的設置問題,所有的數字后面都會有兩個小數據點,這個不影響。
總結
實際上剛才展示的只是一個非常基礎的kettle數據建模,還有更加復雜的,我給大家展示一下
多備份數據庫輸入到單一excel文件內
多數據在線同步并且加密到異地服務器內
單一文件增加常量和序列并且同時同步到多個數據庫內
Kettle非常的強大,而這篇文章所說到的只是kettle spoon,還有pen,chef等。這篇文章主要是做一個拋磚引玉的作用,讓大家能夠了解并且初步使用kettle這個工具。kettle不只是可以做到基本的數據入庫和整理,你甚至還可以寫自己的數據管理模塊,腳本,并且運用在kittle內,比如數據匹配模塊,數據分發模塊等。
*文章原創作者: ArthurKiller,轉載請注明來自FreeBuf黑客與極客(FreeBuf.COM)