重慶出版集團有限公司 陳仕達
目前不少省份的出版發行集團,已經建立積累了擁有大量出版明細數據的省級大集中平臺。為了從海量的明細數據中分析提取出有價值的信息,一種由ETL(Extract-Transform-Load)技術來構建征管指標數據集市的解決方案被提出和應用。其中ETL 過程完全基于Oracle 自帶功能,并采用了改進的ETL 構架,增加了臨時數據存儲區,使得ETL 過程高效穩定,并減輕了源數據庫的壓力。征管指標系統的建立,使得出版工作人員能及時了解圖書狀況。
信息化發展至今,已取得不少重大成果。廣東省已完成大集中平臺的建設,該平臺集成了眾多業務管理系統,各業務系統每天都會產生海量數據。然而,這些數據仍只是業務層面的數據,在原有的操作型數據庫系統中難以提煉升華為有價值的信息。為了更好地利用這些業務數據,廣東出版集團分析系統應用ETL 技術,并根據工作人員給出的業務口徑,將各類業務數據集中整合,建立征管指標數據集市,旨在從海量的圖書數據提取有價值的信息,為稅收管理、績效考核和決策分析等,提供依據和指導。
特別指標是對圖書關鍵數據的統計。通過對圖書業務系統數據的梳理,統計其中的關鍵數據,形成特別指標。這些指標可以準確地反映出當前圖書出版管理狀況,所以,這些指標既可以給決策者提供決策依據,也可以指導一線工作者完成既定任務,還可以用于績效考核[1]。
特別指標系統的數據來源于省級大集中平臺數據庫,這類數據庫的數據來源于多個業務管理系統,例如,認定系統、申報系統、管理系統等。這類大集中平臺數據庫,屬于一個操作型數據的存儲平臺(Operational Data Store,ODS),集合了各圖書業務系統的明細數據。省級平臺數據庫每天會將屬于各市的數據下發到市級下發庫中,因此,要想分析地區的數據,只需從其下發庫抽取即可。
數據倉庫是面向主題的、集成的、不可更新的(穩定性)、不可修改的、隨時間變化的數據集合。
數據集市是部門或工作組級別的數據集合,通常只面向特定主題,屬于企業級數據倉庫的一個子集,分為獨立型和從屬型兩種數據集市。獨立型數據集市直接從應用數據庫獲取數據;從屬型數據集市從企業級數據倉庫或數據中心獲取數據。從屬型數據集市在體系結構上比獨立型數據集市更穩定[2]。
特別指標數據集市具備數據倉庫的基本特征。特別指標數據來源于省級大集中平臺數據庫,具有較高的可靠性和穩定性。特別指標系統是由一系列既相互獨立,又有一定關聯且能反映出圖書出版管理狀況組成的評價體系。所以,在某種程度上,特別指標體系屬于一個數據集市或“小型數據倉庫”。
特別指標系統作為一個“小數據倉庫”系統,基本上包括數據源、ETL 模塊、目標數據倉庫、數據前端展示等,其體系結構如圖1 所示。形成數據倉庫ETL 的詳細過程如下文所述。

圖1 征管指標系統體系結構Fig.1 System structure of tax collection and management index system
ETL 是數據抽取(Extract)、轉換(Transform)、裝載(Loading)的三個過程。ETL 過程是構建數據倉庫的重要環節包括:ETL 引擎首先從數據源抽取出所需的數據,再進行數據轉換與清洗,最后按照預先定義好的數據倉庫模型,將數據加載到數據倉庫中。這對數據的正確性和分析的時效性,有著直接影響。簡單的ETL 體系結構如圖2 所示。

圖2 簡單的ETL 體系結構Fig.2 Simple ETL architecture
ETL 過程的實現方式有多種方法,常用的有以下幾種:(1)是借助ETL 工具實現。常用的ETL 工具有:專業ETL 廠商的產品包括Ascential 公司的DataStageXE、Data Junction 公司的DataJunction、SAS 公司的Data Builder、Sagent 公司的Solution、Informatica 公司的ArdentDataStage 等,整體數據倉庫方案供應商的產品包括Oracle 公司的Warehouse Builder、IBM 公司的Visual Warehousing、Micmsoft 公司的DTS 等。借助工具的優點是,避免了復雜的編碼任務,降低了工作難度,但是也存在靈活性差的缺點。(2)是用手工編碼的方式來實現。該方法的優點是,靈活性和運行效率都比較高,但是有編碼復雜、對技術要求比較高的缺點。(3)是ETL 工具和編碼相結合。第三方法兼有前面兩種方法的優點,能使ETL 的開發速度和效率得到極大的提高。
選擇何種方法實現ETL 過程,要根據項目的具體情況,在既能滿足開發需求,又能節約投資成本的基礎上選擇。經過多方分析,在該項目的開發過程中選擇了手工編碼的方法,基于Oracle 11g 數據庫平臺的PL/SQL 語言來實現ETL 過程,這樣可以最大限度地發揮Oracle 數據庫的性能,并且比商業ETL 工具平臺更加靈活和實用。
根據項目的實際情況,這類系統采用了改進的ETL 體系結構。在征管指標系統中ETL 總的流程圖如圖3 所示。

圖3 ETL 總的流程圖Fig.3 ETL general flow chart
數據鏈接:源系統數據庫和特別指標系統數據庫都是Oracle 數據庫,要想在兩者之間建立連接是相當方便的,只需要建一個公共數據庫鏈接(Public Database Link),即可實現跨平臺、跨網絡訪問數據。而前臺展示中采用了通用數據接口ODBC 連接[3]。
抽取方式:數據抽取有主動式和被動式兩種。主動式是由源系統,主動將符合雙方定義好的格式數據抽取出來。主動方式會對源系統產生依賴,對源系統的性能和網絡有較高要求;被動式則是由ETL 引擎直接從數據源來獲取數據,被動方式比較獨立,但是要自己抽取數據。在這類系統中,由于沒有權限對源數據庫部署ETL 抽取策略,只能采用被動方式抽取數據。
抽取內容包括:為了不對源數據業務系統產生太大影響,可以將抽取時間安排在系統處于空閑的時段,抽取時就可以只抽取滿足征管指標所需要的字段或記錄,而不必采用增量抽取。
抽取時間的選擇:在這類系統中,由于數據源是每天更新一次,所以采用的是基于時間的方式抽取,每天凌晨四點開始抽取數據,此時源數據系統正處于空閑狀態。
特別指標系統的數據,來源于大集中平臺數據庫,這類數據庫是一個操作型數據存儲,已經整合了各個業務系統的數據,并且對數據有較高的約束,也具有較高的完整性和準確性。所以抽取過來的數據所要做的轉換工作并不十分繁重,大部分工作是要將這些小粒度的部門級細節數據,經過整合、轉換、清洗加工成特別指標系統所需要的數據。
每個特別指標數據都由一些特定的字段組成,源數據經過抽取、轉換變成特別指標數據后存在一個臨時表中,裝載時只需將這些數據插入到數據集市中的固定表即可。在插入數據之前,要將當月已有的數據除去,再插入最新的數據。
每個指標的加工過程都相對獨立,但有些指標的加工過程所要抽取的源數據,有重疊的地方,這部分重疊的源數據則需要采取預加工處理。所謂預加工,是指在加工指標數據之前,先將數據抽取到本地數據庫,經過簡單的轉換后緩存起來,等加工需要用到這些數據的指標時,直接從預加工數據抽取即可。這樣做的目的是避免重復抽取,減輕源數據系統的壓力,提高征管指標系統的效率。
在這類系統中,ETL 過程的設計和配置,完全基于Oracle 自帶的功能,主要用到了PL/SQL 存儲過程和調度作業(Oracle Scheduler)。
每個指標加工過程和預加工過程,都由相對應的存儲過程來實現,這些存儲過程都包含了ETL 的抽取、轉換與清洗、裝載過程。在指標加工存儲過程執行之前,先要完成預加工過程,再將需要重復抽取的數據先抽取到本地。每個指標的加工過程都是相對獨立的,所以加工過程既可以采用并行方式,也可以采用串行方式。并行方式加工可以提高效率[4],但會增加設計和實現的復雜度;串行方式的優點是設計和實現簡單,但效率略低。由于大部分指標的加工計算量并不是很大,部分指標甚至能在十幾秒內完成加工,所以在這類系統中采用了串行方式。
通過執行JOB_ALL 存儲過程即可完成整個ETL 過程的執行內容,因為在JOB_ALL 中定義了各個指標加工和預加工過程的執行順序,并通過JOB_ONE 來調用各個存儲過程。JOB_ONE 除了提供調用接口,還會對各個過程加工情況進行監控,當加工出現異常時,便向異常表插入相關信息;若加工無異常,則往日志表插入信息,記錄指標的加工信息。
在征管指標系統中,利用調度作業(Oracle Scheduler),通過CREATE_JOB 函數創建一個定時調度作業,設置作業的執行時間為每天四時,執行內容為JOB_ALL 存儲過程,即可實現ETL 過程的自動調度。
ETL 技術在征管指標系統上的實現,從應用上、數據上、功能上以及技術上滿足了稅務征管、監控、查詢工作的需要以及對圖書出版分析和決策支持。
這類系統具有以下優勢:(1)ETL 過程完全基于Oracle 自有功能實現,未使用任何ETL 軟件工具。商業ETL 軟件工具具有強大的功能,但收費比較高,使用會給項目增高資金成本;若自行開發ETL 工具則又會耗費較多的人力成本。這類系統采用Oracle 11g 自有功能實現了ETL 過程,大大降低了開發成本。(2)ETL 加工程序完全基于PL/SQL,具有較高的執行效率。(3)良好的系統構架方便后續開發。這類系統采用了三層構架,數據訪問層(ETL)、業務邏輯層和表示層,都具有很好的可擴展性,很方便后期向系統增加新的指標。(4)權限劃分滿足不同級層人員方便使用此類系統。這類系統有市局、縣級、市下屬分局和縣下屬分局3 個不同職能范圍人員使用,各級人員只能看到自己部門所需的數據。
特別指標分析系統在2018 年10 月開始上線使用,功能逐步得到完善,到目前已經運行了三年多,未出現異常情況。這類系統的設計在滿足需求的條件下,具有原理簡捷、實現簡便、運行效率高、開發成本低等優點。但其通用性有待進一步提高,能讓ETL 的三個過程分開進行會更好。