成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入探討數據倉庫緩慢變化維的解決方案

數據庫 數據倉庫
維度建模的數據倉庫中,有一個概念叫Slowly Changing Dimensions,中文一般翻譯成“緩慢變化維”,經常被簡寫為SCD。緩慢變化維的提出是因為在現實世界中,維度的屬性并不是靜態的,它會隨著時間的流失發生緩慢的變化。這種隨時間發生變化的維度我們一般稱之為緩慢變化維,并且把處理維度表的歷史變化信息的問題稱為處理緩慢變化維的問題,有時也簡稱為處理SCD的問題。本文則是探討數據倉庫緩慢變化維的方案解決。

緩慢變化維定義 Wikipedia中的定義:

Dimension is a term in data management and data warehousing that refers to logical groupings of data such as geographical location, customer information, or product information.Slowly Changing Dimensions (SCD) are dimensions that have data that slowly changes.

大意是說數據會發生緩慢變化的維度就叫”緩慢變化維”。

舉個例子就清楚了:

在一個零售業數據倉庫中,事實表保存著各銷售人員的銷售記錄,某天一個銷售人員從北京分公司調到上海分公司了,那么如何來保存這個變化呢?也就是說銷售人員維度要怎么恰當的處理這一變化。先來回答一個問題,為什么要處理,或保存這一變化?如果我們要統計北京地區或上海地區的總銷售情況的時候,這個銷售人員的銷售記錄應該算在北京還是算在上海?當然是調離前的算在北京,調離后的算在上海,但是如標記這個銷售人員所屬區域?這里就需要處理一下這個維度的數據,即我們緩慢變化維需要做的事情。

處理緩慢變化維一般按不同情況有以下幾種解決方案:

一、新數據覆蓋舊數據

此方法必須有前提條件,即你不關心這個數劇的變化。例如,某個銷售人員的英文名改了,如果你不關心員工的英文名有什么變化則可直接覆蓋(修改)數據倉庫中的數據。

二、保存多條記錄,并添加字段加以區分

這種情況下直接新添一條記錄,同時保留原有記錄,并用單獨的專用的字段保存區別。如:

(以下表格中Supplier_State表示上面例子中所屬區域,為描述清晰,不用代理鍵表示)

Supplier_key Supplier_Code Supplier_Name Supplier_State Disable

001 ABC Phlogistical Supply Company CA Y

002 ABC Phlogistical Supply Company IL N

或:

Supplier_key Supplier_Code Supplier_Name Supplier_State Version

001 ABC Phlogistical Supply Company CA 0

002 ABC Phlogistical Supply Company IL 1

以上兩種是添加數據版本信息或是否可用來標識新舊數據。

下面一種則是添加記錄的生效日期和失效日期來標識新舊數據:

Supplier_key Supplier_Code Supplier_Name Supplier_State Start_Date End_Date

001 ABC Phlogistical Supply Company CA 01-Jan-2000 21-Dec-2004

002 ABC Phlogistical Supply Company IL 22-Dec-2004

空的End_Date表示當前版本數據,或者你也可一用一個默認的大時間 (如: 12/31/9999)來代替空值, 這樣數據還能被索引識別到.

三、不同字段保存不同值

Supplier_key Supplier_Name Original_Supplier_State Effective_Date Current_Supplier_State

001 Phlogistical Supply Company CA 22-Dec-2004 IL

這種方法用不同的字段保存變化痕跡.但是這種方法不能象第二種方法一樣保存所有變化記錄,它只能保存兩次變化記錄.適用于變化不超過兩次的維度。

四、另外建表保存歷史記錄

即另外建一個歷史表來表存變化的歷史記錄,而維度只保存當前數據。

Supplier:

Supplier_key Supplier_Name Supplier_State

001 Phlogistical Supply Company IL

Supplier_History:

Supplier_key Supplier_Name Supplier_State Create_Date

001 Phlogistical Supply Company CA 22-Dec-2004

這種方法僅僅記錄一下變化歷史痕跡,其實做起統計運算來還是不方便的。

五、混合模式

這種模式是以上幾種模式的混合體,相對而言此種方法更全面,更能應對錯綜復雜且易變化的用戶需求,也是較為常用的。

Row_Key Supplier_key Supplier_Code Supplier_Name Supplier_State Start_Date End_Date
Current Indicator

1 001 ABC001 Phlogistical Supply Company CA 22-Dec-2004 15-Jan-2007 N

2 001 ABC001 Phlogistical Supply Company IL 15-Jan-2007 1-Jan-2099 Y

此中方法有以下幾條優點:

1. 能用簡單的過濾條件選出維度當前的值。

2. 能較容易的關聯出歷史任意一時刻事實數據的值。

3. 如果事實表中有一些時間字段(如:Order Date, Shipping Date, Confirmation Date),那么我們很容易選擇哪一條維度數據進行關聯分析。

其中Row_Key和 Current Indicator字段是可有可無的,加上去更方便,畢竟維度表的數據都不大,多點冗余字段不占太大空間但能提高查詢效率。

這種設計模式下事實表應以Supplier_key為外鍵,雖然這個字段不能***標識一條維度數據,從而形成了事實表與維表多對多的關系,因此在做事實和維度做關聯時應加上時間戳字段(或Indicator字段)。

六、非常規混合模式

上面說到第五種實現方式有點弊端,那就是事實表和維表不是多對一關系,而是多對多關系,這種關系不能在建模時解決只能在報表層面,在報表運行時解決,且在BI語意層建模時需要添加時間過濾條件,比較繁瑣。

下面這種解決方案可以解決此多對多關系,但是得修改一下事實表:

Supplier Dimension:

Version_Number Supplier_key Supplier_Code Supplier_Name Supplier_State Start_Date End_Date

1 001 ABC001 Phlogistical Supply Company CA 22-Dec-2004 15-Jan-2007

0 001 ABC001 Phlogistical Supply Company IL 15-Jan-2007 1-Jan-2099

Fact Delivery: (為描述清晰,同樣不使用代理鍵標識維度)

Delivery_Key Supplier_key Supplier_version_number Quantity Product Delivery_Date Order_Date

1 001 0 132 Bags 22-Dec-2006 15-Oct-2006

2 001 0 324 Chairs 15-Jan-2007 1-Jan-2007

此方案中向維表中的當前數據版本號始終為0,即插入維度數據時先將老版本的數據的version_number改成1(遞增),然后再插入當前數據,此時才能保持當前數據版本號始終為0。

事實表中插入數據時所有的維度數據版本號始終全部為0。

因此此方案完全可解決事實表和維表多對多關系問題,另外還有個優點是能保證事實表和維表的參照完整性,而且我們在用ERwin,PowerDesigner等建模工具建模時,Version_Number和Supplier_key可作為復合主鍵在兩實體間建立鏈接。

【編輯推薦】

  1. Oracle中OSFA和數據倉庫簡介
  2. 建立數據倉庫的八條基本準則
  3. Sybase數據倉庫大鵬證券應用案例
  4. 嵌入式數據庫的現狀和未來
  5. ETL過程原理和數據倉庫建設的優化
  6. 探求數據倉庫關鍵環節ETL的本質
責任編輯:楊鵬飛 來源: 數據倉庫之路
相關推薦

2023-01-12 17:18:06

數據庫多云

2024-01-26 06:42:05

Redis數據結構

2009-12-23 16:13:00

WPF Attache

2009-01-19 15:18:00

數據倉庫Sybase數據庫

2010-03-31 14:58:03

云計算

2009-12-07 16:07:03

PHP類的繼承

2010-11-22 14:18:32

MySQL鎖機制

2010-07-21 09:38:15

PHP緩存技術

2009-11-20 17:17:08

Oracle函數索引

2021-05-17 05:36:02

CSS 文字動畫技巧

2009-12-01 16:34:21

PHP表單

2023-10-23 12:35:36

Golang追加操作

2009-10-16 18:20:07

綜合布線系統

2010-03-05 13:44:00

Python序列

2009-08-27 11:27:58

foreach語句C# foreach語

2011-02-25 09:23:00

Java類加載器

2015-09-02 08:57:56

JavaHashMap工作原理

2009-11-12 13:56:54

2009-12-14 14:40:10

Ruby全局域變量

2012-02-28 14:43:43

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 韩日一区二区三区 | 亚洲欧美成人影院 | 国产精品综合色区在线观看 | 涩爱av一区二区三区 | 日韩视频一区在线观看 | 亚洲天堂免费 | 免费中文字幕 | 狠狠综合久久av一区二区小说 | 亚洲一区网站 | 欧美亚洲国产精品 | 日韩欧美国产一区二区三区 | 久久久免费 | 中文字幕高清 | 色在线免费| 国产精品久久久久久久午夜片 | 国产欧美一区二区三区久久人妖 | 亚洲国产欧美在线 | 日韩精品一区二区三区在线播放 | 一区二区在线 | 日本高清中文字幕 | 九九热精品在线 | 一区二区在线不卡 | 爱高潮www亚洲精品 中文字幕免费视频 | 国产美女一区二区 | 国产成人精品久久二区二区91 | 欧美在线一区二区三区四区 | 成人精品| 高清国产一区二区 | 四虎影院美女 | 久久久久久亚洲 | 成人黄色电影在线播放 | 成人在线观看免费 | 久草新在线| 一级毛片免费 | 成人毛片网 | 国产成在线观看免费视频 | 国产亚洲精品久久久久动 | 欧美专区在线 | 国产亚洲二区 | a黄视频| 亚洲精品www|