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