亚洲欧美日韩熟女|做爱高潮视频网址|国产一区二区三级片|国产Av中文字幕www.性色av|亚洲婷婷永久免费|国产高清中文字幕|欧美变态网站久re视频精品|人妻AV鲁丝第一页|天堂AV一区二区在线观看|综合 91在线精品

閱讀OLAP中緩慢變化的維度。(SCD)處理辦法

2024-04-20

本文介紹了緩慢變化的維度,也稱為緩慢變化。SCD。這是不同的方法來處理不斷變化的數(shù)據(jù)。但是它有更多的細(xì)微差別,還有很多方法可供選擇。假如您對(duì)此感興趣,并且使用了大量的可視化,請(qǐng)堅(jiān)持下去!


本文將介紹以下內(nèi)容:


關(guān)鍵定義


SCD是什么?


為什么SCD非常重要


類型的SCD


結(jié)論


關(guān)鍵定義


請(qǐng)務(wù)必在開始之前了解一些關(guān)鍵概念:


數(shù)據(jù)倉庫


對(duì)數(shù)據(jù)存儲(chǔ)進(jìn)行分析和改進(jìn)。它的結(jié)構(gòu)通常由事實(shí)表和維度表組成。


事實(shí)表


這種表格包含了事件發(fā)生的關(guān)鍵維度。


例如,在社交媒體網(wǎng)站/應(yīng)用程序中,一個(gè)名字叫做“post"事實(shí)表可以用來捕捉與任何帖子活動(dòng)相關(guān)的數(shù)據(jù)及其所有關(guān)鍵層面。


這包括user_id、時(shí)間戳、device_id等:


維度表


“我們?cè)谑聦?shí)表上”post“這里有很多特征。如果我們想要這個(gè)表中的某個(gè)特征(例如user_id)更詳細(xì)的資料,該怎么辦?


它就是維度表的立足之地。維度表是一種包含事實(shí)數(shù)據(jù)表中更多信息的表,例如事實(shí)數(shù)據(jù)。里的user_id列。


這個(gè)表格將包含相關(guān)用戶的輔助數(shù)據(jù),例如他們的名字、姓氏、出生日期、他們建立帳戶的時(shí)間戳、他們的手機(jī)號(hào)碼等。


這一表結(jié)構(gòu)的優(yōu)點(diǎn)是,事實(shí)表永遠(yuǎn)不會(huì)因?yàn)樘喽蛎洠侨绻枰敿?xì)的數(shù)據(jù),則不需要連接!


注:上述結(jié)構(gòu)捕獲了所謂的結(jié)構(gòu)星形架構(gòu)。對(duì)于雪花結(jié)構(gòu),我們也有子維度表。


OLAP


正如其名稱所示,在線分析處理是一種用于大規(guī)模分析的數(shù)據(jù)方法。


假如你熟悉上面的定義,你可能已經(jīng)注意到它們都是特定于OLAP的概念。因?yàn)镾CD只適用于OLAP。非OLTP。為什么呢?



在有機(jī)發(fā)光二極管(在線事務(wù)管理)中,我們優(yōu)先考慮1。無數(shù)據(jù)冗余和2。容納最新版本的數(shù)據(jù)。沒有靈活的空間,所以我們只覆蓋數(shù)據(jù)。


所以,本文將以O(shè)LAP為核心。


使用有機(jī)發(fā)光二極管,您可以選擇冗余和歷史數(shù)據(jù)。當(dāng)新數(shù)據(jù)傳輸時(shí),這為我們提供了更多的戰(zhàn)略選擇,我們將在下面的例子中看到這一點(diǎn)。


SCD是什么?


從這個(gè)角度來看,你現(xiàn)在想知道什么是維度表。


請(qǐng)記住,在文章開頭,我們所說的SCD在高層次上有:對(duì)數(shù)據(jù)進(jìn)行不同的處理方法。


如今我們有了前后的文字,更具體地說,變化緩慢的層次。(SCD)是專門處理維度表數(shù)據(jù)在不斷變化的數(shù)據(jù)的不同方法。


假定你有以下內(nèi)容user_id維度表:


注:為了簡(jiǎn)單考慮,我們已經(jīng)從前面的user_id示例中刪除了一些字段。


例如,主鍵(行唯一值)是user_id。接著,我們的數(shù)據(jù)管道將處理包含以下數(shù)據(jù)的新數(shù)據(jù):


有些新數(shù)據(jù)和現(xiàn)有數(shù)據(jù)有相同的主鍵鍵,我們注意到(user_id)。尼古拉斯·凱奇(NicholasCage)和杰克·佩拉爾塔(JakePeralta)所有手機(jī)號(hào)碼都是新的。


這是數(shù)據(jù)的不斷變化。


你可能會(huì)有一些最初的問題:


為什麼會(huì)“慢”地發(fā)生?為何不是事實(shí)表?為何尼古拉斯凱奇在這里?


咱們一個(gè)個(gè)解決這個(gè)問題。


為什么它“緩慢”發(fā)生?


修飾詞“慢”可能來自于對(duì)這些層次更新不太頻繁的期望。但是這并不是一個(gè)嚴(yán)格的規(guī)則。


為何不是事實(shí)表?


“鍵定義“以上部分,事實(shí)數(shù)據(jù)表是由事件驅(qū)動(dòng)的。一旦發(fā)生事情,除非時(shí)間過程可能,否則是不可逆的!因此,這里的變化不適合。


比如有人發(fā)布微博故事的時(shí)候,現(xiàn)在已經(jīng)發(fā)生了,無法更改。如果用戶刪除了微博故事,那么這是一個(gè)獨(dú)立的事件,也就是事實(shí)表中的另一條線。


為什么尼古拉斯凱奇在這里?


他是個(gè)偉大的演員!在《無法承受的重量》中,我喜歡他的表演。


為什么SCD非常重要


如今你可能會(huì)想:為什么改變數(shù)據(jù)很重要?


讓我們參考前面的例子。你有一個(gè)包含一些當(dāng)前數(shù)據(jù)的數(shù)據(jù)庫,并且有一組新的數(shù)據(jù)進(jìn)入。正如我們?cè)贜icholasCage的手機(jī)號(hào)碼中看到的,其中一些與您現(xiàn)有的數(shù)據(jù)相沖突:


原始記錄和新記錄之間存在矛盾。我們應(yīng)該優(yōu)先選擇哪一個(gè)?是只保留一個(gè)記錄,還是同時(shí)保留兩個(gè)記錄?


這個(gè)定義SCD很重要。你最終會(huì)選擇一種策略來處理這種情況,根據(jù)團(tuán)隊(duì)中的業(yè)務(wù)需求和/或者最佳的數(shù)據(jù)工程實(shí)踐。


注:為了簡(jiǎn)單考慮,我們已經(jīng)從例子中刪除了user_id列。但它是幫助數(shù)據(jù)管道確定哪些層次正在發(fā)生變化的關(guān)鍵列。


類型的SCD


有哪些不同的策略,我們?nèi)绾螞Q定哪些策略?


有許多策略-7種類型。但是,由于脫離實(shí)際,有些策略從來沒有使用過,所以我們只關(guān)注本文中的幾個(gè)關(guān)鍵策略。


本論文將提供一些幫助理解的例子,并對(duì)何時(shí)使用哪一種策略提供一些指導(dǎo)。


SCD-0:無更新


表明:更新的數(shù)據(jù)已經(jīng)進(jìn)入,但是我們忽略了它,沒有做任何改變。


推理:我們有一些維度是我們預(yù)期永遠(yuǎn)不會(huì)改變的,因此這一新數(shù)據(jù)很可能是重復(fù)的,或只是有缺陷的數(shù)據(jù)。


示例:假設(shè)顧客第一次正確輸入,我們絕不希望他們的出生日期發(fā)生變化。這是不合理的,除非你偽造出生證明。


所以,如果提出任何改變,例如:


具有新生日期值的行


我們選擇忽略這些變化,保持?jǐn)?shù)據(jù)不變。


SCD-0如何處理更新?


思考:


由于很少有字段永遠(yuǎn)不會(huì)改變,我發(fā)現(xiàn)這種SCD的適用性有限。


即便對(duì)于像date_of_birth這類字段,客戶也可能在第一次出錯(cuò),所以我們需要我們的數(shù)據(jù)管道來處理這些邊緣情況。


SCD-1:覆蓋


解釋:進(jìn)入更新的數(shù)據(jù)行,然后我們完全覆蓋當(dāng)前的行程。


推理:我們的維度只關(guān)心當(dāng)前的狀態(tài),所以我們刪除了任何過時(shí)的行,然后使用更新的行。


例:尼古拉斯·凱奇(NicholasCage)和杰克·佩拉爾塔(JakePeralta)他們的數(shù)據(jù)再次更新。這次,他們更改了手機(jī)號(hào)碼。


有新手機(jī)號(hào)碼值的行行


由于我們只關(guān)心他們的手機(jī)號(hào)碼,所以我們不再需要聯(lián)系他們,user_id他們的舊聯(lián)系電話在表中使用。


SCD-如何處理更新?


思考:


這一SCD策略可以證明它是有用的,尤其是當(dāng)你試圖防止表格膨脹時(shí)。


然而,丟失數(shù)據(jù)總是有風(fēng)險(xiǎn)的,因?yàn)榕まD(zhuǎn)這個(gè)決定并恢復(fù)數(shù)據(jù)并不總是那么容易。未來需求總會(huì)發(fā)生變化,所以我會(huì)謹(jǐn)慎使用。


SCD-2:全部保留(基于行)


解釋:會(huì)有更新的數(shù)據(jù)線,所以我們會(huì)把新的線添加到表格中。我們不會(huì)刪除任何數(shù)據(jù)。為了區(qū)分兩者,我們最多有三個(gè)新列:


開始日期列-本條目的數(shù)據(jù)管道處理時(shí)間


結(jié)束日期列-這個(gè)內(nèi)容什么時(shí)候結(jié)束(如果還沒有結(jié)束,你可以選擇31-12-99999,以顯示它永遠(yuǎn)不會(huì)在我們有生之年結(jié)束)


版本號(hào)列-1表示第一個(gè)版本,然后在每次更新時(shí)增加1。


所以,維度表的結(jié)構(gòu)將按照下列策略進(jìn)行改變:


表結(jié)構(gòu)含有SCD-2。


推理:雖然我們有更新的維度,但是我們不希望在這個(gè)過程中丟失歷史數(shù)據(jù)。


示例:2024年2月2日,NicholasCage和JakePeralta(01年2024月2024日)<>日本)更新了他們的地址。


有新郵編值的行


雖然我們希望更新表格,但是我們希望保留舊的數(shù)據(jù),防止我們進(jìn)行一些歷史分析。


例如,我們可能想觀察客戶多年來的位置分布。2020年把尼古拉斯·凱奇放在他的新地址是沒有意義的,因?yàn)樗?dāng)時(shí)沒有住在那里。因此,我們保留了新舊數(shù)據(jù)和新舊數(shù)據(jù)版本、start_dateend_date列,以幫助區(qū)分兩者。


SCD-如何處理更新?


思考:


SCD-二是我首選的維度數(shù)據(jù)變更方法之一。


你用易于閱讀和解釋的方法來維護(hù)所有的數(shù)據(jù)。


即便你最后只使用最新版本或者第一個(gè)版本,也可以選擇版本end_date輕松實(shí)現(xiàn)。


這個(gè)策略也是可以擴(kuò)展的,因?yàn)槟憧梢院苋菀椎靥幚砦磥硗粋€(gè)字段的變化:為每一個(gè)新版本添加新行。


SCD-3:全部保留(基于列)


解釋:進(jìn)入更新的數(shù)據(jù)行,然后我們使用新列進(jìn)行跟蹤。我們將其分為兩列——“當(dāng)前”列和“最后一列”,而不僅僅是為了一個(gè)層次:


表結(jié)構(gòu)含有SCD-3。


類似于SCD-2,我們不會(huì)刪除任何數(shù)據(jù)。


推理:雖然我們有更新的維度,但是我們不希望在這個(gè)過程中丟失歷史數(shù)據(jù)。


例:尼古拉斯·凱奇(NicholasCage)和杰克·佩拉爾塔(JakePeralta)更新他們的地址:



有新郵編值的行


我們所做的是:


將“current_post_code所有值都拷貝到“previous_post_code”


隨后更換“current_post_code“所有有新值的值:


SCD-如何處理更新?


思考:


假如我們期望在顧客的生活中只有一次改變,那么SCD-3是合適的。但是,這個(gè)很難保證。


一些文章討論了SCD-3的組合,這些組合包括更多的列表來顯示更多的版本。例如,使用“previous_3_post_code“列捕捉第三個(gè)最新值。


在我看來,SCD-3不能隨著數(shù)據(jù)的變化而很好地?cái)U(kuò)展,在這一點(diǎn)上,選擇SCD-2策略更有意義。


SCD-4:全部保留(歷史記錄表)


解釋:在一個(gè)維度表中,我們沒有保存所有變更的數(shù)據(jù),而是創(chuàng)建了一個(gè)額外的“迷你級(jí)別”歷史記錄表。


通過這種方式,當(dāng)更新的數(shù)據(jù)行傳輸時(shí),我們將做兩件事:


覆蓋當(dāng)前表(類似于SCD-1)


跟蹤之前的數(shù)值(類似于SCD-2)更新歷史表


這一“歷史表”包含了什么?


主鍵列-允許您回到當(dāng)前表格(簡(jiǎn)單考慮一下,下圖省略)


其它列在維度表中-由于你正在捕捉這些列的歷史價(jià)值(例如post_code)


開始日期列-本條目的數(shù)據(jù)管道處理時(shí)間


結(jié)束日期列(可選))-這個(gè)內(nèi)容什么時(shí)候結(jié)束(如果還沒有結(jié)束,你可以選擇31-12-99999,以表明它永遠(yuǎn)不會(huì)在我們的生命周期中結(jié)束)


版本號(hào)列(可選)-1表示第一個(gè)版本,然后在每次更新時(shí)增加1。


歷史表


推理:雖然我們有更新的維度,但是我們不想在這個(gè)過程中丟失歷史數(shù)據(jù)。同時(shí),我們也希望保持所有當(dāng)前數(shù)據(jù)的快照。


例:尼古拉斯·凱奇(NicholasCage)和杰克·佩拉爾塔(JakePeralta)他們的地址再次更新:


行行具有新的帖子代碼值


解釋以上,我們對(duì)當(dāng)前和歷史表格進(jìn)行了相應(yīng)的更新:


SCD-如何處理更新(當(dāng)前表)


SCD-如何處理更新(歷史表)


思考:


SCD-四是我最喜歡的另一種方法,當(dāng)前版本與SCD-2有許多相似之處。


你現(xiàn)在可能會(huì)說:那么,我該如何在兩者之間做出決定呢?


在SCD-2和SCD-4之間進(jìn)行選擇時(shí),應(yīng)考慮兩個(gè)關(guān)鍵問題:


層次更新頻率如何?


在整篇文章中,我們的例子只介紹了一個(gè)用戶更新。我們明確表示,SCD-2比SCD-3更適合超過兩次更新。


但是,如果客戶的郵政代碼更新了多達(dá)100次怎么辦?甚至更多?如果這種情況發(fā)生在數(shù)百萬客戶身上,這在微博這樣的大平臺(tái)上是可能的?


使用SCD-2,我們可以捕捉更改,但是user_id維度表將變得愚蠢,特別是在你一開始只需要當(dāng)前的數(shù)據(jù)。


這就是SCD-4的亮點(diǎn):它為用戶提供了靈活性。如果你想實(shí)施歷史分析,它真的需要連接歷史表,所以請(qǐng)記住這一點(diǎn)。


下游分析是否一直依賴于歷史數(shù)據(jù)或當(dāng)前數(shù)據(jù)?


假如下游數(shù)據(jù)用戶經(jīng)常使用歷史郵編數(shù)據(jù),那么SCD-4就意味著他們必須在當(dāng)前表格和歷史表格之間進(jìn)行連接。


SCD-二是繞過這一步,減少查詢執(zhí)行時(shí)間和集群資源。


但是,如果專門針對(duì)當(dāng)前數(shù)據(jù)的查詢頻率相當(dāng)高,那么SCD-2就意味著客戶每次都要對(duì)其進(jìn)行過濾。


SCD-4表示用戶只需使用當(dāng)前表格,繞過此步驟,減少查詢執(zhí)行時(shí)間和集群資源。


結(jié)論


簡(jiǎn)而言之,SCD是一種不同的方法來處理維度表中的數(shù)據(jù)變更。每種方法在不同的方案中都非常有用,最終取決于你的要求。因此,請(qǐng)花時(shí)間了解您的數(shù)據(jù),然后相應(yīng)地應(yīng)用正確的SCD策略。


本文來自微信微信官方賬號(hào)“數(shù)據(jù)驅(qū)動(dòng)智能”(ID:Data作者:曉曉,36氪經(jīng)授權(quán)發(fā)布,_0101)。


本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請(qǐng)?jiān)谖闹凶⒚鱽碓醇白髡呙帧?/p>

免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)及時(shí)與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com