本文將模擬一個數據倉庫系統,其中有用戶數據,產品數據以及訂單數據。根據這些數據結構建立多維數據集,并且以增量更新的方式對其進行處理。 之所以強調增量的方式,是考慮到事實表中數據的增長,假設以后增長到幾十億,全量處理就變得很不現實,所以方案中著重演示以增量方式處理多維數據集的方案。 增量處理多維數據集的關鍵是要將事實數據分為兩部分處理,一個是增量事實表,一個是歷史事實表,多維數據集第一次處理歷史事實表中的數據,以后每次周期性的處理都是處理增量表中的數據。 本文中提及的SQLServer和Visual Studio都是2008版本,2005版本同樣也適用。 數據假設:一張用戶表,一張產品表,一張訂單表,訂單里記錄的是誰買了什么。多維數據集統計的需求就是根據訂單統計誰買過什么。 首先,建立數據倉庫,在數據引擎下新建BIDemo庫。 接下來建立用戶表,結構如下: 此外還有產品表: 以及歷史訂單表和建立增量訂單表,它們的結構是一樣的: 為了測試方便,我們在用戶表中加入一些測試數據: 然后在產品表中加入一些測試數據 至于事實表,手動加入測試數據就不現實了,所以這里寫了一個程序利用隨機數來灌測試數據: 這個程序的代碼可以在本文中找到。生成后的數據基本如下所示: 到此,測試的數據結構以及數據就已經準備好了,相當于有了一個小型的數據倉庫。 接下來在Visual Studio中建立BI解決方案,方案下分為一個SSIS項目和一個SSAS項目。 在SSAS項目下建立數據源和數據源視圖,這里需要注意的是,事實表用歷史表,而不是增量表,盡管其還沒有數據。 首先建立數據源,連接剛才建立的數據庫,并且在數據源視圖里定義好關系,如下圖: 然后,根據此數據源視圖建立多維數據集,需要注意的是,度量選擇歷史表,維度選擇用戶和產品兩個表。 最后,部署多維數據集。這里只部署就可以了,不需要處理,處理任務將在以后的SSIS包中處理。 下面來看SSIS項目。在SSIS包里建立四個任務模塊,類型分別如下: 前兩個多維數據集處理模塊是用來處理多維數據集的,數據流負責把增量事實表的數據導到歷史事實表中,最后執行一個SQL任務把增量表中的數據刪除。 兩個多維數據集模塊,前一個是專門處理維度,第二個是處理cube。這里之所以要把多維數據集維度處理單獨拿出來放在前面,是因為在筆者經驗中,對多維數據集的處理雖然是全部處理,但是新增維度的數據不會被聚合到其中,所以需要單獨拿出來放在前面處理。 (題外話:對于這個地方筆者一直也不是很理解,按理說既然是全部處理那么怎么連維度都不處理呢,還需要單拿出來) 以下是設置維度處理模塊,在界面中選擇維度即可。 然后是cube處理模塊,如下圖。 然后指定增量更新,并且配置增量更新的數據表,這里指定增量表。 多維數據集處理完成之后就可以把增量表的數據放到歷史表中了,以保證第二天加入的數據都是增量數據。 需要注意的是,在實際的運行當中,一定要保證BI的處理過程時業務系統沒有發生數據,否則就會造成數據遺漏而導致不平。所以,BI的處理一般都是在凌晨。 然后是第三步的數據流模塊,此部分的主要任務是將增量表的數據轉移到歷史表中。 最后的一個SQL任務是一個Delete或者Truncate table任務,把增量表里的數據清空。 最終的任務流程如下圖: 執行包,全部成功之后應該如下圖所示: 執行成功后,打開歷史表,可以發現數據已經在里面了,而且增量表中的數據已經不存在了。 查詢多維數據集,可以看到新的數據被聚合到其中。 通過以上透視表可以清晰的看到誰買了什么樣的產品。 再次運行Rubbish往增量表里灌幾條數據,然后重新運行此SSIS包,可以發現新增的數據已經被聚合到多維數據集中了,注意處理的方式是增量的。 本文提及的數據結構模型都很簡單,主要介紹的是多維數據集處理的流程以及方法,重點闡述增量部分的方案,以及需要注意的問題。希望有知道更好方法的兄弟一起交流探討。
FAQ: 1.增量數據是怎么來的? 筆者個人認為這個需要跟業務系統配合來做,比如加入觸發器等?;蛘咄ㄟ^時間戳,到業務系統中能提取到。 2.如果有更新和刪除怎么辦? 通常是在本文提到的方案之上,再加一個度量值位,標識為1,代表新增。對于刪除的記錄,實際上是加入了一個同樣的記錄,并且表示為為-1。更新則是加入了兩條記錄,一條記錄為-1跟刪除差不多,一條就為1代表修改后的記錄,三個一樣的記錄靠時間戳來標記哪一個是修改后的記錄。主要就是以這個標識位作為度量進行統計。 |
|