關(guān)于kettle的安裝、數(shù)據(jù)庫連接等前置工作準備妥當了,從產(chǎn)品角度來說,會主要從業(yè)務(wù)核心的應(yīng)用場景來進行實操。
ETL有2個重要的概念,一是轉(zhuǎn)換、一是調(diào)度。在接下來的系列文章中,將分別從轉(zhuǎn)換和調(diào)度的場景進行分享。
轉(zhuǎn)換場景很多,處理源表到目標表的ETL場景轉(zhuǎn)化場景主要有:
1、單表間直接轉(zhuǎn)換
2、字段合并與字段拆分
3、行轉(zhuǎn)列與列轉(zhuǎn)行
4、字段的規(guī)格化清洗
5、字段的衍生計算
6、多表關(guān)聯(lián)同步至單表與單表同步到多表
在數(shù)據(jù)處理之初,業(yè)務(wù)需要將源數(shù)據(jù)庫A表中的數(shù)據(jù)推送到目標數(shù)據(jù)庫B表中,屬于單表間的直接轉(zhuǎn)化。
本節(jié)主要介紹使用kettle工具將源表和目標表的數(shù)據(jù)進行直接同步的應(yīng)用場景,由于一些眾所眾知的原因,僅通過Kettle工具操作示例。
業(yè)務(wù)目標:
將來源庫A中的【TQ_COMP_INFOCHG(機構(gòu)信息變動表)】的數(shù)據(jù)推送到目標數(shù)據(jù)庫B【org_basic_info_chg(機構(gòu)信息變動表)】。
業(yè)務(wù)流程分析:
抽取數(shù)據(jù):抽取來源庫A的數(shù)據(jù)表TQ_COMP_INFOCHG(機構(gòu)信息變動表)的數(shù)據(jù),可以定義抽取數(shù)據(jù)范圍;
轉(zhuǎn)換數(shù)據(jù):字段值進行直接映射,不需要轉(zhuǎn)化;
加載數(shù)據(jù):數(shù)據(jù)加載到目標庫B的數(shù)據(jù)表org_basic_info_chg(機構(gòu)信息變動表)中,目標表已有數(shù)據(jù),進行更新;否則,新增數(shù)據(jù)。
操作步驟:
1、啟動Spoon,進入主界面。點擊左上角的?文件 → 新建 → 轉(zhuǎn)換,?新建一個轉(zhuǎn)換;或者在歡迎頁tab,主對象樹窗口雙擊轉(zhuǎn)換快速新建。


2、點擊左側(cè)的?核心對象?,選擇?表輸入?并把它拖到右側(cè)的編輯區(qū)中進行配置。
由于抽取的數(shù)據(jù)來源某個數(shù)據(jù)庫的數(shù)據(jù)表,因此拖選【表輸入】插件,為了方便業(yè)務(wù)理解,可以將插件重命名。

表輸入插件是為了查詢來源數(shù)據(jù),也就是抽取的數(shù)據(jù),因此需要將來源庫表信息進行填寫或選擇后,進行抽取SQL的定義。
關(guān)于數(shù)據(jù)庫連接的方式,此處不做贅述,可參考?kettle數(shù)據(jù)庫連接。

表輸入配置完成后,保存轉(zhuǎn)換文件,可點擊【運行這個轉(zhuǎn)換】按鈕進行本地運行。

3、點擊左側(cè)的?核心對象?,選擇??插入/更新?并把它拖到右側(cè)的編輯區(qū)中,按住?shift鍵連接 “表輸入”。
由于抽取的數(shù)據(jù)需要同步加載到目標數(shù)據(jù)表,因此拖選【表輸出】插件,為了方便業(yè)務(wù)理解,可以將插件重命名。

表輸出插件是為了將抽取數(shù)據(jù)輸出到目標表,因此主要做三件事:
(1)目標數(shù)據(jù)庫表信息進行填寫或選擇;
(2)進行目標表字段唯一索引字段的配置,根據(jù)唯一索引,查看數(shù)據(jù)是否存在,當數(shù)據(jù)存在,更新數(shù)據(jù);若不存在,則插入數(shù)據(jù);
(3)目標表字段與來源表字段的映射關(guān)系配置。

如截圖中的配置,選擇完目標數(shù)據(jù)庫和目標數(shù)據(jù)表之后,用來查詢的關(guān)鍵字,選擇id,表示這里按照id查詢,如果此id存在,則更新數(shù)據(jù),若不存在則插入數(shù)據(jù);將目標表字段和來源表的流字段的映射關(guān)系進行匹配后,點擊保存即可。
插入/更新配置完成后,保存轉(zhuǎn)換文件,可點擊【運行這個轉(zhuǎn)換】按鈕進行本地運行。

4、轉(zhuǎn)換成功后,也可以檢查本地數(shù)據(jù)庫,查看數(shù)據(jù)是否推送成功。


到這里,一個單表間的轉(zhuǎn)換流程就配置成功了,后續(xù)打開.ktr后綴的文件即可。

從上述這個簡單的單表間直轉(zhuǎn)的應(yīng)用場景操作過程中,我們可以從kettle工具獲得哪些啟發(fā)?如何更好地將ETL工具產(chǎn)品化?
從kettle工具獲得的啟發(fā):
1.kettle作為強大且成熟的ETL工具,已經(jīng)形成了一套通用化和標準化的設(shè)計規(guī)范和開發(fā)規(guī)范,對于產(chǎn)品經(jīng)理而言,Kettle是個相當重要的競品,如果你想超過它,請駕馭它,而在競品實操和分析的過程中可以知不足,知已有產(chǎn)品功能不足和自身產(chǎn)品能力不足;
2.工具服務(wù)于業(yè)務(wù),一切脫離業(yè)務(wù)的工具開發(fā)都是耍流氓,只有經(jīng)過業(yè)務(wù)場景的歸納和業(yè)務(wù)流程的梳理,才能得出工具所需要提供的能力是什么;
3.業(yè)務(wù)場景多種多樣,一般的實現(xiàn)路徑是經(jīng)歷從簡單到復(fù)雜,從基礎(chǔ)到高階的過程,單表間直轉(zhuǎn)的轉(zhuǎn)換場景,是第一個基礎(chǔ)應(yīng)用場景,在基礎(chǔ)場景的應(yīng)用過程中,不斷去定義基礎(chǔ)概念、去挖掘共性模塊、去抽象業(yè)務(wù)流程,這樣會讓產(chǎn)品研發(fā)迭代處于一個穩(wěn)健的狀態(tài)。
如何更好地將ETL工具產(chǎn)品化:
1、Kettle工具本身的通用性也決定了其產(chǎn)品設(shè)計上有很多應(yīng)對不同場景下的特殊配置,而某一類業(yè)務(wù)場景抽象后,是可以有一套相對簡單的流程的,讓業(yè)務(wù)人員人員更方便地去配置,提高配置效率,降低學(xué)習(xí)成本;
2、產(chǎn)品是人來使用,需要準確地表達概念,提高易用性。中文版的Kettle工具一些關(guān)鍵信息的語言表達不夠準確,需要從業(yè)務(wù)關(guān)心的角度,展示一些運行結(jié)果的指標,比如在步驟日志中,讀、寫、輸入、輸出、更新、拒絕等數(shù)據(jù)指標,有意義,但不完全是面向業(yè)務(wù)的語言,業(yè)務(wù)關(guān)心的是總共有多少數(shù)據(jù)量、成功了多少、失敗了多少等等。
當然,每個公司、每個行業(yè)所需要處理的數(shù)據(jù)對象各有不同,需要吸收kettle工具的養(yǎng)分側(cè)重點也不同,還得具體問題具體分析。