數(shù)倉避坑:搞懂維度模型
編輯導(dǎo)語:數(shù)據(jù)倉庫有助于建立數(shù)據(jù)集合,進(jìn)而支撐企業(yè)更好地做出決策支持,推動(dòng)后續(xù)業(yè)務(wù)的進(jìn)行。那么,構(gòu)建數(shù)據(jù)倉庫的過程中需要注意什么問題?本篇文章里,作者總結(jié)、分享了數(shù)倉建模中的維度問題,一起來看一下。
前言
這個(gè)系列將從小白視角講述構(gòu)建數(shù)據(jù)倉庫過程所需的知識(shí)和問題,主要受眾是數(shù)據(jù)中臺(tái)產(chǎn)品、數(shù)據(jù)開發(fā)、數(shù)據(jù)分析人員。
引入
在大學(xué)就聽說過數(shù)據(jù)倉庫,但是當(dāng)時(shí)被書的厚度勸退。后來工作中要做數(shù)據(jù)倉庫,這次不得不咬牙重新翻開那些經(jīng)典大頭書。
一開始,我想趕緊落地,快速過了一遍概念性的東西,業(yè)務(wù)過程、粒度、維度、事實(shí)、度量等等。做到中途發(fā)現(xiàn),各種基礎(chǔ)抽象概念沒搞清,競(jìng)品的某些功能我都看不懂。
正所謂欲速則不達(dá),這些底層的知識(shí),是數(shù)據(jù)類不變的產(chǎn)品的內(nèi)核,搞懂了這些,才能跑得快、跑得穩(wěn)、跑得遠(yuǎn)。
一、什么是模型,什么是建模
什么是模型?作為數(shù)據(jù)行業(yè)從業(yè)者,如果你從來沒有思考過這個(gè)問題,你一定要看下去。
先看一個(gè)例子:2021年 3 月 6 日,小明到樓下【行家】便利店買吃的,來來回回逛了幾圈,雖然很餓,但又想減肥,最終拿了 1 個(gè)【柯德吉】人造肉漢堡。
準(zhǔn)備付賬的時(shí)候,收銀員跟他說,最近搞活動(dòng),加 4 塊可以選一瓶原價(jià) 8 塊的【卡石】酸奶。小明覺得很劃算,于是去拿了酸奶,一共付了 12 塊。
上面的這段文字,就是模型。
作為計(jì)算機(jī)專業(yè)的學(xué)生,第一次看到別人給我解釋這個(gè)模型的時(shí)候,我第一反應(yīng)是What?這不就是一段文字嘛?都沒數(shù)據(jù)庫,都不是表單,這能算模型?
別急,先看看百度百科給出的模型定義。
模型,是指通過主觀意識(shí)借助實(shí)體或者虛擬表現(xiàn)構(gòu)成客觀闡述形態(tài)結(jié)構(gòu)的一種表達(dá)目的的物件(物件并不等于物體,不局限于實(shí)體與虛擬)。
簡(jiǎn)單來說,模型是映射 “事實(shí)” 的東西,構(gòu)建這個(gè)東西的動(dòng)作就叫做建模。
其實(shí),如果我們學(xué)了數(shù)據(jù)庫,且沒認(rèn)真讀教科書,很容易狹隘地只從數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)的層面去理解模型。
上述的例子,是一種“文字模型”。而且,這個(gè)模型還可以補(bǔ)充更多細(xì)節(jié),比如,采用什么方式付款、支付了多少錢。
為了表達(dá)更加簡(jiǎn)潔,我們可以省略更多的信息,只記錄關(guān)鍵信息:“ 2021年 3 月 6 日,小明買了,一個(gè) 柯德吉牌人造肉漢堡,一瓶卡石牌酸奶(共計(jì) ¥12)”。
如果用 Excel,我們可以更加簡(jiǎn)潔(節(jié)省空間你懂的):
二、范式模型,為了更好地記錄和更新
計(jì)算機(jī)的出現(xiàn),也誕生了新的語言,我們也順理成章地開始用新語言去建模。
這里,我省去長(zhǎng)篇的對(duì)關(guān)系模型、范式模型的介紹,直接跳到應(yīng)用場(chǎng)景,假設(shè)這個(gè)便利店用了現(xiàn)成的 ERP、CRM 系統(tǒng),這些系統(tǒng)設(shè)計(jì)好了模型,數(shù)據(jù)會(huì)填充成如下的樣子。
1. 訂單表
2. 訂單詳情表
3. 商品詳情表
數(shù)據(jù)量不大,分析人員寫 SQL 直接對(duì)范式模型進(jìn)行查詢,算賬分析無所不能,小幾十萬數(shù)據(jù),速度完全 OK。
三、維度模型,為分析而生
范式模型很好地解決了快速記錄和節(jié)約存儲(chǔ)空間。
但事物都有兩面性,當(dāng)數(shù)據(jù)量大的時(shí)候,從范式模型中查詢?nèi)?shù),就比較慢了。但數(shù)據(jù)量一大,就頂不住了。
人類社會(huì),但凡出現(xiàn)問題,總會(huì)天降猛士。Innon 和 Kimball 等人提出來新方案:為數(shù)據(jù)分析設(shè)計(jì)一套新模型。
范式模型主要解決數(shù)據(jù)的插入和更新,維護(hù)一致性等問題,維度模型則解決大數(shù)據(jù)場(chǎng)景分析的問題,這兩者也就是所謂的 OLTP 和 OLAP 。
通過一個(gè)荒誕的例子來理解兩者的區(qū)別。
你家是個(gè)大家族,七大姑八大姨,平時(shí)需要打電話聯(lián)系。范式建模:每個(gè)人只存自己同輩人以及各自子女的聯(lián)系方式。如果叔叔想找侄子/侄女(你),只能通過你爸爸。維度建模:所有的親戚聯(lián)系方式都寫到了一個(gè)家庭通訊錄上,想找人,直接找通訊錄。
這個(gè)例子現(xiàn)實(shí)生活不存在,主要想幫助大家理解兩種模型的差異:
- 范式模型為了應(yīng)對(duì)數(shù)據(jù)頻繁變更的場(chǎng)景,數(shù)據(jù)存得零散。為了保證數(shù)據(jù)的一致性,還要符合一定的規(guī)范,我們常見的是三范式(3NF)。
- 維度模型會(huì)將數(shù)據(jù)冗余,把一些相關(guān)的數(shù)據(jù)存到一起,方便快速查詢?nèi)?shù)。
維度模型的出現(xiàn),就是為了解決大數(shù)據(jù)量導(dǎo)致的查詢慢的問題。
四、維度建模的四大要素
數(shù)據(jù)倉庫領(lǐng)域的經(jīng)典著作《維度建模工具箱》中,Kimball 定義了經(jīng)典的維度建模的四步曲:選定業(yè)務(wù)過程、聲明粒度、確定維度、構(gòu)建事實(shí)。
1. 業(yè)務(wù)過程
很多數(shù)據(jù)倉庫書籍都給出了業(yè)務(wù)過程的通用定義:業(yè)務(wù)過程是企業(yè)活動(dòng)中的事件,如下單、支付、退款都是業(yè)務(wù)過程,業(yè)務(wù)過程是一個(gè)不可拆分的行為事件。
看完定義,我們就會(huì)犯難了,什么是企業(yè)活動(dòng)中的事件?打開手機(jī)付款,選擇支付寶和微信,這些操作算不算業(yè)務(wù)過程?
這里,我們真得咬文嚼字,回歸場(chǎng)景。交易的場(chǎng)景,有 2 個(gè)參與方:消費(fèi)者和便利店。
便利店作為企業(yè),如果它關(guān)心的結(jié)果只是消費(fèi)者買了什么、買了多少,那消費(fèi)者選擇支付方式的事件,它完全不管,也不用記錄。
但如果用戶只開通了微信支付,沒開通支付寶,因?yàn)橹Ц秵栴}導(dǎo)致沒法成交,那企業(yè)肯定也會(huì)關(guān)心選擇支付方式這個(gè)事件以及其結(jié)果。
業(yè)務(wù)過程,是不可拆分的事件,而且是基于分析目標(biāo)進(jìn)行選定的。
理解一個(gè)詞,不能脫離情景,多嘗試將自己置于企業(yè)經(jīng)營(yíng)的情景下。
企業(yè)里每天都有各種事情,而作為管理者的我們,最核心的關(guān)注點(diǎn)是什么?是從收益、成本出發(fā),價(jià)值鏈條上最具影響力的事情或者事件。
2. 粒度
理解粒度,其實(shí)很簡(jiǎn)單:干什么樣的事情,會(huì)新增一條記錄。
小樂支付了一筆,系統(tǒng)會(huì)新增一條支付記錄,當(dāng)我們要統(tǒng)計(jì)分析交易的訂單數(shù)時(shí),訂單是最細(xì)的粒度。
而這筆交易中,包含了兩個(gè)商品,當(dāng)我們要分析所有訂單賣出的商品數(shù),每個(gè)商品則變成了最細(xì)粒度。
3. 維度
維度,就是我們要進(jìn)行分析的角度。
比如,在便利店場(chǎng)景中,一天的經(jīng)營(yíng)結(jié)束了,可以按品牌的維度分析,各個(gè)品牌的酸奶銷售量;可以按日期維度分析,我們可以知道,周一到周日,每天的交易額如何。
某天,當(dāng)我們發(fā)現(xiàn)交易數(shù)據(jù)發(fā)生異常的時(shí)候,我們可以按照品牌、日期等維度進(jìn)行分析,逐個(gè)排查,直到找到根本的原因。
4. 事實(shí)
廣義地來說,所有被記錄下來的事情,都是事實(shí)。
而維度建模中,對(duì)事實(shí)進(jìn)行了細(xì)分,事實(shí)包含 2 類屬性:維度、度量。維度就是上文所說的各個(gè)角度的數(shù)據(jù),而度量,則通常是數(shù)值型的。
舉個(gè)例子,我們描述一個(gè)長(zhǎng)方形,但是沒描述它具體多長(zhǎng)、多寬,其他人是沒法確定這個(gè)長(zhǎng)方形具體多大的。
只有補(bǔ)充上它對(duì)應(yīng)的維度和度量,人們才能理解。比如,長(zhǎng) 4cm,寬 3cm。
長(zhǎng)、寬是維度,4米、3米則是對(duì)應(yīng)維度上的度量。
事實(shí),就是描述客觀事物的所有核心信息的所有數(shù)據(jù)的集合。
五、總結(jié)
- 模型是映射 “事實(shí)” 的東西,構(gòu)建這個(gè)東西的動(dòng)作就叫做建模。
- 范式模型很好地解決了快速記錄和節(jié)約存儲(chǔ)空間的問題。
- 維度模型是一種用于大數(shù)據(jù)量場(chǎng)景下實(shí)現(xiàn)快速分析的模型。
- 維度建模有四大要素:業(yè)務(wù)過程、粒度、維度、事實(shí)。
數(shù)據(jù)分析,本質(zhì)還是利用數(shù)據(jù)去分析客觀的規(guī)律,利用這些規(guī)律,進(jìn)而進(jìn)行經(jīng)營(yíng)戰(zhàn)略、營(yíng)銷策略上的調(diào)整,以應(yīng)對(duì)市場(chǎng)的變化。
用好維度建模,從數(shù)據(jù)中發(fā)現(xiàn)規(guī)律和秘密,更好地幫助企業(yè)提高效率和效益。
下期文章我們繼續(xù)聊數(shù)倉,帶你細(xì)品粒度~
作者:lee;公眾號(hào):樂說樂言
本文由 @lee 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自?Unsplash,基于 CC0 協(xié)議
OLTP和OLAP理解的不是很清楚,OLTP是聯(lián)機(jī)事件處理過程,主事件處理,對(duì)用戶操作迅速響應(yīng),產(chǎn)生數(shù)據(jù),且數(shù)據(jù)總是在最新,數(shù)據(jù)量級(jí)小,OLAP是聯(lián)機(jī)分析處理過程,面向分析決策人員,數(shù)據(jù)量級(jí)大,主查詢。
感謝老哥指教。
我想表達(dá)的是,不同情況的模型選擇不同。
OLTP,為了數(shù)據(jù)快速更新,多數(shù)情況參考范式建模(不過多數(shù)情況也不滿足3NF)。OLAP,面向數(shù)據(jù)分析,沒錯(cuò),多數(shù)是維度建模(至少《大數(shù)據(jù)之路》那本書里介紹阿里也是用的維度模型)