集團公司(嵌入ETL工具)財務報表系統解決方式
集團公司(嵌入ETL工具)財務報表系統解決方式
一、項目背景:
某集團公司是一家擁有100多家子公司的大型集團公司,旗下子公司涉及各行各業,包含:金礦、銅礦、房產、化纖等。因為子公司在業務上的差異。子公司的財務報表也存在非常多不同之處。因此,各個子公司須要依據自己的情況,制作符合自己個性化需求的報表模版,然後再部署到集團server進行統一管理。
集團使用的是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的定時時間。運行就可以。設置頁面參考例如以下圖:
售後服務體系:
集團公司(嵌入ETL工具)財務報表系統解決方式