數(shù)倉避坑:想清楚維度
編輯導語:數(shù)倉的建設有助于企業(yè)進行更好地決策,而對數(shù)倉維度的理解可以讓我們更清楚地了解事項如何推進。那么,我們要如何理解數(shù)倉模型中的“維度”?維度,一般指觀察事物的角度。本篇文章里,作者對數(shù)倉中的“維度”進行了解讀,一起來看一下。
數(shù)倉系列的文章,寫到了第三篇,終于開始聊維度了。
維度,這個詞非常常見,但也抽象。在數(shù)倉、數(shù)分場景里,維度到底是什么?來看看這篇吧。
一、維度是什么
不懂就問,維度是什么?我們學習的自然反應,自然是去查閱專業(yè)資料。
1)阿里dataphin產(chǎn)品簡介——基本概念是這樣介紹維度:人們觀察事物的角度,是指一種視角,是確定事物的多方位、多角度、多層次的條件和概念。
2)華為DGC產(chǎn)品介紹——基本概念如此介紹維度:維度是用于觀察和分析業(yè)務數(shù)據(jù)的視角,支撐對數(shù)據(jù)匯聚、鉆取、切片分析,用于SQL中的Group by條件。多數(shù)維度具有層級結構,如:地理維度、時間維度。
3)再看看《數(shù)據(jù)倉庫工具箱》怎么說的。
維度能提供圍繞某一業(yè)務過程所涉及的 “誰、什么、何處、何時、為什么、如何” 等背景。維度表包含BI應用所需要的用于過濾及分類事實的描述性屬性。
牢牢掌握事實表的粒度,就能夠將所有可能存在的維度區(qū)分開。當與給定事實表進行關聯(lián)時,任何情況下都應該使維度保持單一值。
4)再看《阿里巴巴大數(shù)據(jù)之路》怎么說的。
維度是維度建模的基礎和靈魂。在維度建模中,將度量稱為 “事實” 將環(huán)境描述為 “維度” ,維度是用于分析事實所需要的多樣環(huán)境。
例如,在分析交易過程時,可以通過買家、賣家、商品和時間等維度描述交易發(fā)生的環(huán)境。
維度所包含的表示維度的列,稱為維度屬性。
維度屬性是查詢約束條件、分組和報表標簽生成的基本來源,是數(shù)據(jù)易用性的關鍵。維度的作用一般是查詢約束、分類匯總以及排序。
不知道你第一次看到這些解釋作何感想,我的真實的反應是:對方好好地給我講人話,為什么我聽不懂。
說實在的,這些解釋,非常專業(yè),也很硬核,但理解起來是有點困難的,沒怎么接觸過數(shù)據(jù)的伙伴估計有點懵。
二、維度怎么來的
維度,到底是什么呢?為什么它叫維度呢?
學習新知識的時候,并不只要看權威的書,任何能給你啟發(fā)、能幫助你理解的書,都是好書。
一本書看不懂,多換幾本看看,要是看完還不懂,那就嘗試回歸本質(zhì)吧。
讓我們先忘掉維度模型,忘掉數(shù)據(jù),忘掉維度。
來,一起玩?zhèn)€游戲快問快答游戲:在30秒內(nèi)說出盡可能多的筷子、勺子的相同點和不同點。
看到這個問題,你會如何描述、對比它們呢?
思考過后,我給你加個條件。問題變成:筷子和勺子在使用方式上的相同點和不同點是什么?
看到新問題,你內(nèi)心是不是有點方向了,覺得更容易回答了?
這其實是《大象·Thinking in UML》里面一個有意思的互動測試,當時我看到這個問題,腦子非?;靵y,一時詞窮,相同點和不同點我沒說出來多少。一方面平時觀察得少,另一方面,抽象訓練得也少。
作者說:這個問題沒有標準答案,這個問題反映你是否會從抽象的方法去看待事物。在不知不覺中,每一組相同點和不同點都來自于你的一個抽象角度。
例如,當從用途的角度去抽象時,他們的相同點是三者都是餐具,而不同點是筷子用于夾,勺子用來舀;從字面上理解,他們都來帶了“子”,還有其他的相同、不同點就不多說了,重點是這句:從不同的抽象角度可以得出非常不同的結果。
作者還說,抽象角度的不同,決定了建模方向的不同。我之前講過什么是建模嗎?描述一個東西,就是在建模。
為什么給出分類后,會更容易回答。因為找到了合適的對比分析的角度,問題就會簡單很多。
什么是維度,再看看這句話:維度就是觀察事物的角度。維度是抽象的對客觀事物的描述。
維度本不存在。是人類觀察事物、分析問題、分類歸納得來的,每個人都可以創(chuàng)造自己的維度。
維度一直都存在。只是我們發(fā)現(xiàn)了它,用某種方式描述了它。
三、維度和粒度的關系
上一篇文章,講過粒度,那么這里就要將維度和粒度聯(lián)系起來學習。
1)維度有層級結構,不同層級對應不同的粒度。
地理維度有不同的層級:國家、省/自治州/直轄市、市、縣,時間維度也有不同的層級和粒度:年度、季度、月度、星期、天等。
正如有了要描述的事情,確定了粒度,再去找對應的維度。比如,訂單系統(tǒng),會記錄下單的時間信息,時間維度上,粒度會細到秒。學籍系統(tǒng),學生戶籍信息中,要填入地區(qū)維度的信息,粒度要細化到省市。
2)維度的組合越多,粒度越細細
客觀的世界,是多維的。描述一個客觀事物,維度(通常配合相應的度量)越多,粒度越細。
比如一個箱子,我們可以描述其長寬高,還可以描述顏色。不同描述維度組合越多,粒度越細,描述也越細致。
3)隨著事物的變化,描述的維度可以增加
一個箱子會經(jīng)歷生產(chǎn)、運輸、送貨上門等環(huán)節(jié),從產(chǎn)地送達到顧客手中。
箱子被生產(chǎn)出來后,沒有品牌、產(chǎn)地屬性,或者說屬性值為空。未經(jīng)歷運輸過程的箱子,沒有快遞公司、配送員屬性。
但是人們可以賦予它這些維度,并且填入維度值。維度是基于人類描述客觀事物的需要,被創(chuàng)造來的。
4)有的維度,沒有直接的數(shù)字度量
從客觀唯物主義的角度來說,某個實體的存在,長、寬、高這種比較客觀的維度屬性,是有確定值的。
但某些主觀的東西,也是需要被描述的。比如,人的帥氣程度。我們就簡單分兩類:很帥、一般。
這種主觀的維度,沒有絕對精確的度量值,無法直接和數(shù)字劃上等號。
但聰明的我們依然可以定性、定量地測算進而描述。比如搞投票,得分超過90為很帥,60-90為一般。
但這種方式,只能估算,沒有四海皆準的定值,不同的人群,投票結果不同。
四、兩個有意思的維度問題
上面我提到的兩本經(jīng)典書籍里,介紹了非常多維度的問題。這里我只說自己碰到的 2 個我思考很久的問題。
1)維度的角色
維度模型里,很多人不理解什么是維度角色。包括最開始的我自己。
淘寶的業(yè)務過程大家應該很熟悉,涉及4個關鍵步驟:買家下單、買家付款、賣家發(fā)貨、買家確認收貨。
每個過程,都會涉及一個對應的時間,即下單時間、支付時間、發(fā)貨時間、確認收貨時間。
如果只分析其中的一個業(yè)務過程,比如買家下單,那只需要一個時間字段即可。
但是分析完整四個過程時,如果還只有一個時間字段,那如何區(qū)分其具體含義呢?到底是下單還是支付時間,搞不清楚。
只有一個字段,肯定不夠。那必然要有 4 個時間字段。而且我們會給不同的命名,下單、支付、發(fā)貨、確認收貨作為時間的前綴。
這樣一來,咱們看的人是能理解各個數(shù)字的含義了。但不僅如此,還得讓計算機系統(tǒng)也理解。
所以,要弄一個 “維度角色”的字段來標識,以便計算機能理解。
在寫SQL腳本的時候,Left join 相同的維度表兩次,要給維度表取別名,這樣才不會報錯。
2)維度和One data 理論的關系
當我在研究華為的DAYU(現(xiàn)在叫做DGC)產(chǎn)品時,我發(fā)現(xiàn),基于指標生成的SQL,都是 left join 維度表 on 維度表的主鍵,而且是 group by 維度表的主鍵。
當時沒時間仔細研究,先抄了作業(yè)。
后續(xù)就碰到不少同事提出疑惑:為什么要如此設計?日期維度表里,還有周、月、年等字段,為什么不能支持按照這些字段進行 group by,一定只能按照維度表的主鍵的粒度進行匯總?
當我站在數(shù)倉層的時候,我無法回答,因為傳統(tǒng)數(shù)倉,把維度模型建出來就好了。但當我跳到第二層 One data 理論的時候,我仿佛了解了一些(我也不確認自己是否完全懂了)。
我的體會就是:維度表就代表著一種粒度,基于相同統(tǒng)計粒度的指標,才能聚合到同一個表中。
從 SQL 的角度來看,都按照某個維度表主鍵進行 group by 的指標,能合并到一個表里面,最終能基于維度表的主鍵,將維度表的非屬性字段也冗余到表中。
關于維度,還有很多,緩慢變化維、層次維度、雜項維度等等問題,大家可以自行看經(jīng)典的書籍或找高人求教~
五、總結
正如書籍里面所說,維度模型的靈魂,就是維度。
之前看《幕后產(chǎn)品》書中提到陸游的一句詩:汝果欲學詩,功夫在詩外。
學習維度,也是如此。知識不是孤立的,搞清楚維度,要聯(lián)合粒度、事實等模塊去理解,必要的時候,還要結合生活。
本文僅記錄自己學習維度模型、實踐過程中所踩的坑。如有錯誤,請各位指教。下一篇,將會分享維度模型中的“事實”。
作者:lee;公眾號:樂說樂言
本文由 @lee 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉載
題圖來自?Unsplash,基于 CC0 協(xié)議
datafin不是dataphin,老哥
老哥你的評論嚇我一跳,哈哈哈,我去確認了下,確實是【dataphin】
https://help.aliyun.com/document_detail/109739.html
居然沒人評論,現(xiàn)在的產(chǎn)品經(jīng)理都只是功能產(chǎn)品經(jīng)理嗎?我來頂一個。
感謝支持~