集團公司(嵌入ETL工具)財務報表系統解決方案
一、項目背景:
某集團公司是一家擁有100多家子公司的大型集團公司,旗下子公司涉及各行各業,包括:金礦、銅礦、房產、化纖等。由于子公司在業務上的差異,子公司的財務報表也存在很多不同之處。因此,各個子公司需要根據自己的情況,制作符合自己個性化需求的報表模版,然后再部署到集團服務器進行統一管理。
集團使用的是SAP,所有子公司正是因這個系統而產生大量數據且這些數據保存在一起。此外,各子公司也有一些自己的系統,所以各自也會產生一些數據。
出于數據安全等因素的考慮,各個子公司的數據統一集中在集團總部的數據庫。子公司的報表開發人員使用FineReport連接到總部數據庫時,只能看到自己權限內的數據
二、項目建設目標:
定期的將總數據源中數據導入到各子公司內的數據庫表中,此時各子公司在開發報表時就只需連自己的數據庫表即可,這樣就實現了數據權限的控制,同時也較好的將各子公司的數據放在各子公司的數據庫表內。
三、項目建設方案:
1. 所用工具Kettle簡介
Kettle是一款國外開源的ETL工具,純java編寫,可以在Window、Linux、Unix上運行,綠色無需安裝,數據抽取高效穩定。
ETL即數據抽取、轉換、裝載的過程。它是構建數據倉庫的重要環節。數據倉庫是面向主題的、集成的、穩定的且隨時間不斷變化的數據集合用以支持經營管理中的決策制定過程。Kettle 的中文名稱叫水壺,含義就是希望把各種數據放到一個壺里,然后以一種指定的格式流出。
Kettle這個ETL工具集,它允許你管理來自不同數據庫的數據,通過提供一個圖形化的用戶環境來描述你想做什么,而不是你想怎么做。
Kettle中有兩種腳本文件,transformation和job,transformation完成針對數據的基礎轉換,job則完成整個工作流的控制。
作為Pentaho的一個重要組成部分,現在在國內項目應用上逐漸增多。FineReport報表軟件可以實現和Kettle工具的完美集成應用。
2. Kettle工具的優勢:
(1)kettle開源、高效
(2)kettle 非常強大而且易于使用的設計界面
(3)有非常強大而且眾多的使用群體,應用廣泛
(4)可用java進行集成開發:
提供了基于JAVA的腳步編寫功能,可以靈活地自定義ETL過程,使自行定制、批量處理等成為可能,這才是一個程序員需要做的工作,而不僅是象使用Word一樣操作kettle用戶界面。
3. Kettle工具工作原理:
(1)Kettle的四大模塊:

Spoon 是一個圖形用戶界面,它允許你運行轉換或者任務,其中轉換是用Pan工具來運行,任務是用Kitchen來運行。Pan是一個數據轉換引擎,它可以執行很多功能,例如:從不同的數據源讀取、操作和寫入數據。Kitchen 是一個可以運行利用XML 或數據資源庫描述的任務。通常任務是在規定的時間間隔內用批處理的模式自動運行。
以下是一個簡單的ETL過程:

(2)原理總結:
Kettle實現數據轉換,主要是通過JDBC驅動,建立連接,加載數據,轉化數據并儲存數據。
4. 利用kettle實現定時導出數據方案
實現定時導出數據,主要實現二個關建點:
1.定時功能
2.從源數據庫中提取數據插入目標數據庫
利用 kettle工具可以輕松實現以上二點。
1.定時功能:
Kettle是成熟專業的ETL工具,實現定時功能只需對作業進行相應的設置即可,如下所示,表示每天的12點整執行同步任務。

2.從源數據庫中提取數據插入目標數據庫
Kettle只需簡單配置即可從數據庫中取出數據,如下圖所示。

其中${company}為公司變量名稱,存入目標數據庫也類似,只需要簡單配置即可
詳細使用配置見下面的實例。
5. Kettle工具的定時數據提取應用實例:
(1)實例功能:
定期對各個子公司的數據庫表進行查詢并且通過數據抽取和比較實現數據插入更新。
(2)實例分析:
實現整項作業共需要3個文件,名稱和對應功能如下表所示:
文件名稱 | 實現功能 |
main.kjb | 作業文件,用來定時執行mainTrans.ktr |
mainTrans.ktr | 用來批量執行trans1.ktr,并提供trans1.ktr的變量 |
trans1.ktr | 根據mainTrans.ktr提供的變量具體執行導出的轉化 |
(1)文件詳細說明:
mainTrans.ktr:
在mainTrans.ktr中生成不同的數據庫連接信息和其他變量信息。
示例中為手動輸入數據,也可以把信息保存在文本中或者數據庫中,設置對應的輸入即可。如下所示,table為子公司數據庫中的表名,company對應公司,后面的值為子公司數據庫的連接信息。

mainTrans.ktr中有個java腳本,具體行為為獲取trans1.ktr文件,設置變量并執行。
上面有幾條記錄就會執行幾次trans1.ktr。
trans1.ktr:
具體執行導出的文件,示例中為mysql數據庫,表名和字段也是特別設置的,請根據自己的環境進行相應的修改。
表輸入:
表輸入按照需要導出的總數據庫信息配置好,sql示例語句為:
SELECT * FROM kettletb WHERE company='${company}'
表示為只選出對應子公司的數據,其中${company}為傳入進來的公司名。
具體配置頁面如下圖:

表輸出:
這里的配置需要根據變量來設置,目標表為${table}來獲取要導出的表名。其他配置如下所示,其中的值對應mainTrans.ktr中生成的數據(其中Password為${password}):

插入更新:
示例中對數據庫表中的id和name字段進行查詢,通過對id的比較來篩選掉原本數據庫表里就用的數據,這樣的話只需要插入最新更改的數據即可,大大提高了數據轉換的效率。

設置main.kjb的定時時間,運行即可。設置頁面參考如下圖:

售后服務體系:
