qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請(qǐng)?jiān)L問 http://qaseven.github.io/

          ETL學(xué)習(xí)筆記之四:開源項(xiàng)目 Kettle

              現(xiàn)在是一個(gè)Google的時(shí)代,而對(duì)于開發(fā)者,開源已成為最重要的參考書。對(duì)于某課題,不管你是深入研究還是初窺門徑。估且google一把,勾一勾同行的成就,你必會(huì)獲益良多。

              說到ETL開源項(xiàng)目,Kettle當(dāng)屬翹首,因此,偶決定花點(diǎn)時(shí)間了解一下。
              項(xiàng)目名稱很有意思,水壺。按項(xiàng)目負(fù)責(zé)人Matt的說法:把各種數(shù)據(jù)放到一個(gè)壺里,然后呢,以一種你希望的格式流出。呵呵,外國人都很有聯(lián)想力。
              看了提供的文檔,然后對(duì)發(fā)布程序的簡單試用后,可以很清楚得看到Kettle的四大塊:
              Chef——工作(job)設(shè)計(jì)工具 (GUI方式) 
              Kitchen——工作(job)執(zhí)行器 (命令行方式)
              Spoon——轉(zhuǎn)換(transform)設(shè)計(jì)工具 (GUI方式)
              Span——轉(zhuǎn)換(trasform)執(zhí)行器 (命令行方式)

              嗯,廚師已經(jīng)在廚房里,勺子和盤子一應(yīng)俱全,且看能做出如何的大餐?

              一:Chef——工作(job)設(shè)計(jì)器
              這是一個(gè)GUI工具,操作方式主要通過拖拖拉拉,勿庸多言,一看就會(huì)。
              何謂工作? 多個(gè)作業(yè)項(xiàng),按特定的工作流串聯(lián)起來,開成一項(xiàng)工作。正如:我的工作是軟件開發(fā)。我的作業(yè)項(xiàng)是:設(shè)計(jì)、編碼、測試!先設(shè)計(jì),如果成功,則編碼,否則繼續(xù)設(shè)計(jì),編碼完成則開始設(shè)計(jì),周而復(fù)始,作業(yè)完成。
              來,看看Chef中的作業(yè)項(xiàng):
              1.1: 轉(zhuǎn)換:指定更細(xì)的轉(zhuǎn)換任務(wù),通過Spoon生成。通過Field來輸入?yún)?shù)。
              1.2: SQL:sql語句執(zhí)行,
              1.3: FTP:下載ftp文件。 
              1.4: 郵件:發(fā)送郵件。 
              1.5: 檢查表是否存在,
              1.6: 檢查文件是否存在,
              1.7: 執(zhí)行shell腳本。如:dos命令。
              1.8: 批處理。(注意:windows批處理不能有輸出到控制臺(tái))。 
              1.9: Job包。作為嵌套作業(yè)使用。
              1.10:JavaScript執(zhí)行。這個(gè)比較有意思,我看了一下源碼,如果你有自已的Script引擎,可以很方便的替換成自定義Script,來擴(kuò)充其功能。 
              1.11:SFTP:安全的Ftp協(xié)議傳輸。 
              1.12:HTTP方式的上/下傳。

              好了,看看工作流: 
              如上文所述,工作流是作業(yè)項(xiàng)的連接方式。分為三種:無條件,成功,失敗。這個(gè)沒啥好說的,從名字就能知道它的意圖。
             嗯,為了方便工作流使用,提供了幾個(gè)輔助結(jié)點(diǎn)單元(你也可將其作為簡單的作業(yè)項(xiàng)): 
              1:Start單元,任務(wù)必須由此開始。設(shè)計(jì)作業(yè)時(shí),以此為起點(diǎn)。
              2:OK單元:可以編制做為中間任務(wù)單元,且進(jìn)行腳本編制,用來控制流程。 
              3:ERROR單元:用途同上。
              4:DUMMY單元:啥都不做,主要是用來支持多分支的情況。文檔中有例子,不再多說。

              存儲(chǔ)方式: 
              支持XML存儲(chǔ),或存儲(chǔ)到指定數(shù)據(jù)庫中。
              一些默認(rèn)的配置(如數(shù)據(jù)庫存儲(chǔ)位置……),在系統(tǒng)的用戶目錄下,單獨(dú)建立了一個(gè).Kettle目錄,用來保存用戶的這些設(shè)置。  
              LogView:可查看執(zhí)行日志。

              二:Kitchen——作業(yè)執(zhí)行器 
              是一個(gè)作業(yè)執(zhí)行引擎,用來執(zhí)行作業(yè)。這是一個(gè)命令行執(zhí)行工具,沒啥可講的,就把它的參數(shù)說明列一下。
              -rep      : Repository name   任務(wù)包所在存儲(chǔ)名
              -user     : Repository username   執(zhí)行人
              -pass     : Repository password   執(zhí)行人密碼
              -job      : The name of the job to launch 任務(wù)包名稱
              -dir      : The directory (don't forget the leading / or /) 
              -file     : The filename (Job XML) to launch 
              -level    : The logging level (Basic, Detailed, Debug, Rowlevel, Error, Nothing) 指定日志級(jí)別 
              -log      : The logging file to write to  指定日志文件 
              -listdir  : List the directories in the repository 列出指定存儲(chǔ)中的目錄結(jié)構(gòu)。 
              -listjobs : List the jobs in the specified directory 列出指定目錄下的所有任務(wù) 
              -listrep  : List the defined repositories 列出所有的存儲(chǔ)
              -norep    : Don't log into the repository  不寫日志
              嗯,居然不支持調(diào)度。看了一下文檔,建議使用操作系統(tǒng)提供的調(diào)度器來實(shí)現(xiàn)調(diào)度,比如:Windows可以使用它的任務(wù)計(jì)劃工具。

              三:Spoon——轉(zhuǎn)換過程設(shè)計(jì)器
              GUI工作,用來設(shè)計(jì)數(shù)據(jù)轉(zhuǎn)換過程,創(chuàng)建的轉(zhuǎn)換可以由Pan來執(zhí)行,也可以被Chef所包含,作為作業(yè)中的一個(gè)作業(yè)項(xiàng)。
              下面簡單列舉一下所有的轉(zhuǎn)換過程。(簡單描述,詳細(xì)的可見Spoon文檔)

              3.1:Input-Steps:輸入步驟 
              3.1.1:Text file input:文本文件輸入,
                     可以支持多文件合并,有不少參數(shù),基本一看參數(shù)名就能明白其意圖。
              3.1.2:Table input:數(shù)據(jù)表輸入
                     實(shí)際上是視圖方式輸入,因?yàn)檩斎氲氖莝ql語句。當(dāng)然,需要指定數(shù)據(jù)源(數(shù)據(jù)源的定制方式在后面講一下)
              3.1.3:Get system info:取系統(tǒng)信息
                     就是取一些固定的系統(tǒng)環(huán)境值,如本月最后一天的時(shí)間,本機(jī)的IP地址之類。
              3.1.4:Generate Rows:生成多行。
                     這個(gè)需要匹配使用,主要用于生成多行的數(shù)據(jù)輸入,比如配合Add sequence可以生成一個(gè)指定序號(hào)的數(shù)據(jù)列。
              3.1.5:XBase Input: 
              3.1.6:Excel Input: 
              3.1.7:XML Input: 
                     這三個(gè)沒啥可講的,看看參數(shù)就明了。

              3.2:Output-Steps: 輸出步聚
              3.2.1:Text file output:文本文件輸出。
                   這個(gè)用來作測試蠻好,呵呵。很方便的看到轉(zhuǎn)換的輸出。
              3.2.2:Table output:輸出到目的表。
              3.2.3:Insert/Update:目的表和輸入數(shù)據(jù)行進(jìn)行比較,然后有選擇的執(zhí)行增加,更新操作。
              3.2.4:Update:同上,只是不支持增加操作。
              3.2.5:XML Output:

              3.3:Look-up:查找操作
              DataBase: 
              Stream:
              Procedure:
              Database join:
              很簡單,看看參數(shù)就明白了。

              3.4:Transform  轉(zhuǎn)換 (嗯,重點(diǎn))
              3.4.1:Select values: 對(duì)輸入的行記錄數(shù)據(jù) 的字段進(jìn)行更改 (更改數(shù)據(jù)類型,更改字段名或刪除) 
             數(shù)據(jù)類型變更時(shí),數(shù)據(jù)的轉(zhuǎn)換有固定規(guī)則,可簡單定制參數(shù)。可用來進(jìn)行數(shù)據(jù)表的改裝。 
              3.4.2: Filter rows: 對(duì)輸入的行記錄進(jìn)行 指定復(fù)雜條件 的過濾。 
                    用途可擴(kuò)充sql語句現(xiàn)有的過濾功能。但現(xiàn)有提供邏輯功能超出標(biāo)準(zhǔn)sql的不多。 
              3.4.3:Sort rows:對(duì)指定的列以升序或降序排序,當(dāng)排序的行數(shù)超過5000時(shí)需要臨時(shí)表。 
              3.4.4:Add sequence:為數(shù)據(jù)流增加一個(gè)序列,
                    這個(gè)配合其它Step(Generate rows, rows join),可以生成序列表,如日期維度表(年、月、日)。
              3.4.5:Dummy:不做任何處理,主要用來作為分支節(jié)點(diǎn)。
              3.4.6:Join Rows:對(duì)所有輸入流做笛卡兒乘積。
              3.4.7:Aggregate:聚合,分組處理
              3.4.8:Group by:分組
             用途可擴(kuò)充sql語句現(xiàn)有的分組,聚合函數(shù)。但我想可能會(huì)有其它方式的sql語句能實(shí)現(xiàn)。 
              3.4.9:Java Script value:使用mozilla的rhino作為腳本語言,并提供了很多函數(shù),用戶可以在腳本中使用這些函數(shù)。 
              3.4.10. Row Normaliser:該步驟可以從透視表中還原數(shù)據(jù)到事實(shí)表,
                    通過指定維度字段及其分類值,度量字段,最終還原出事實(shí)表數(shù)據(jù)。 
              3.4.11. Unique rows:去掉輸入流中的重復(fù)行
             在使用該節(jié)點(diǎn)前要先排序,否則只能刪除連續(xù)的重復(fù)行。  
              3.4.12. Calculator:提供了一組函數(shù)對(duì)列值進(jìn)行運(yùn)算,
                    所介紹,使用該方式比用戶自定義JAVA SCRIPT腳本速度更快。
              3.4.13. Merge Rows:用于比較兩組輸入數(shù)據(jù),一般用于更新后的數(shù)據(jù)重新導(dǎo)入到數(shù)據(jù)倉庫中。
              3.4.14. Add constants:增加常量值。
                   這個(gè)我沒弄明白它的用法???
              3.4.15. Row denormaliser:同Normaliser過程相反。
              3.4.16. Row flattener:表扁平化處理 
            指定需處理的字段和扃平化后的新字段,將其它字段做為組合Key進(jìn)行扃平化處理。

              3.5:Extra:除了上述基本節(jié)點(diǎn)類型外還定義了擴(kuò)展節(jié)點(diǎn)類型  
              3.5.1:SPLIT FIELDS, 按指定分隔符拆分字段 
              3.5.2:EXECUTE SQL SCRIPT,執(zhí)行SQL語句
              3.5.3:CUBE INPUT, 
              3.5.4:CUBE OUTPUT等。 
              這兩個(gè)沒明白是啥意思。
              
              3.6:其它 
              存儲(chǔ)方式: 與Chef相同。
              數(shù)據(jù)源(Connection);見后。
              Hops:setp連接起來,形成Hops。
              Plugin step types等節(jié)點(diǎn):這個(gè)沒仔細(xì)看,不知如何制作Plugin step。
              LogView:可查看執(zhí)行日志。

              四:Pan——轉(zhuǎn)換的執(zhí)行工具
              命令行執(zhí)行方式,可以執(zhí)行由Spoon生成的轉(zhuǎn)換任務(wù)。
              同樣,不支持調(diào)度。
              參數(shù)與Kitchen類似,可參見Pan的文檔。

              五:其它
              Connection: 
              可以配置多個(gè)數(shù)據(jù)源,在Job或是Trans中使用,這意味著可以實(shí)現(xiàn)跨數(shù)據(jù)庫的任務(wù)。
              支持大多數(shù)市面上流行的數(shù)據(jù)庫。

              個(gè)人感覺:(本人不成熟的看法)
              1:轉(zhuǎn)換功能全,使用簡潔。作業(yè)項(xiàng)豐富,流程合理。但缺少調(diào)度。
              2:java代碼,支持的數(shù)據(jù)源范圍廣,所以,跨平臺(tái)性較好。
              3:從實(shí)際項(xiàng)目的角度看,和其它開源項(xiàng)目類似,主要還是程序員的思維,缺少與實(shí)際應(yīng)用項(xiàng)目(專業(yè)領(lǐng)域)的更多接軌,當(dāng)然,項(xiàng)目實(shí)施者的專注點(diǎn)可能在于一個(gè)平臺(tái)框架,而非實(shí)際應(yīng)用(實(shí)際應(yīng)用需要二次開發(fā))。
              4:看過了大多數(shù)源碼,發(fā)現(xiàn)源碼的可重用性不是太好(缺少大粒度封裝),有些關(guān)鍵部分好象有Bug。
                    比如:個(gè)別class過于臃腫,線程實(shí)現(xiàn)的同步有問題。
              5:提供的工具有些小錯(cuò),如參數(shù)的容錯(cuò)處理。

              好,對(duì)Kettle有了淺淺的了解,其它的容后再說。

          posted on 2011-10-31 13:14 順其自然EVO 閱讀(426) 評(píng)論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

          <2011年10月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 漳浦县| 通辽市| 张家口市| 齐河县| 读书| 宜都市| 怀宁县| 凤庆县| 林西县| 东阿县| 东源县| 贵南县| 琼中| 台湾省| 长白| 清涧县| 泾川县| 图木舒克市| 太康县| 全椒县| 武鸣县| 丹东市| 青龙| 酉阳| 无棣县| 嘉义县| 郎溪县| 同仁县| 穆棱市| 金昌市| 日照市| 兰州市| 清水河县| 广河县| 武强县| 青冈县| 保康县| 曲松县| 洛浦县| 鄂伦春自治旗| 长治县|