數(shù)倉建設(shè)保姆級教程曹质,離線和實(shí)時(shí)理論+實(shí)戰(zhàn))

文檔大綱:

一、數(shù)倉基本概念

1. 數(shù)據(jù)倉庫架構(gòu)

我們在談數(shù)倉之前擎场,為了讓大家有直觀的認(rèn)識(shí)羽德,先來談數(shù)倉架構(gòu),“架構(gòu)”是什么迅办?這個(gè)問題從來就沒有一個(gè)準(zhǔn)確的答案宅静。這里我們引用一段話:在軟件行業(yè),一種被普遍接受的架構(gòu)定義是指系統(tǒng)的一個(gè)或多個(gè)結(jié)構(gòu)站欺。結(jié)構(gòu)中包括軟件的構(gòu)建(構(gòu)建是指軟件的設(shè)計(jì)與實(shí)現(xiàn))姨夹,構(gòu)建的外部可以看到屬性以及它們之間的相互關(guān)系。

這里參考此定義矾策,把數(shù)據(jù)倉庫架構(gòu)理解成構(gòu)成數(shù)據(jù)倉庫的組件及其之間的關(guān)系匀伏,畫出下面的數(shù)倉架構(gòu)圖:

數(shù)倉架構(gòu)

上圖中顯示的整個(gè)數(shù)據(jù)倉庫環(huán)境包括操作型系統(tǒng)和數(shù)據(jù)倉庫系統(tǒng)兩大部分。操作型系統(tǒng)的數(shù)據(jù)由各種形式的業(yè)務(wù)數(shù)據(jù)組成蝴韭,這些數(shù)據(jù)經(jīng)過抽取、轉(zhuǎn)換和裝載(ETL)過程進(jìn)入數(shù)據(jù)倉庫系統(tǒng)熙侍。

任何事物都是隨著時(shí)間的演進(jìn)變得越來越完善榄鉴,當(dāng)然也是越來越復(fù)雜,數(shù)倉也不例外蛉抓。在數(shù)據(jù)倉庫技術(shù)演化過程中庆尘,產(chǎn)生了幾種主要的架構(gòu)方法,包括數(shù)據(jù)集市架構(gòu)巷送、Inmon企業(yè)信息工廠架構(gòu)驶忌、Kimball數(shù)據(jù)倉庫架構(gòu)混合型數(shù)據(jù)倉庫架構(gòu)。這幾種架構(gòu)我們后面再講付魔,接下來看下數(shù)倉的基本概念聊品。

2. 數(shù)據(jù)倉庫概念

英文名稱為Data Warehouse,可簡寫為DW或DWH几苍。數(shù)據(jù)倉庫的目的是構(gòu)建面向分析的集成化數(shù)據(jù)環(huán)境翻屈,為企業(yè)提供決策支持(Decision Support)。它出于分析性報(bào)告和決策支持目的而創(chuàng)建妻坝。

數(shù)據(jù)倉庫本身并不“生產(chǎn)”任何數(shù)據(jù)伸眶,同時(shí)自身也不需要“消費(fèi)”任何的數(shù)據(jù),數(shù)據(jù)來源于外部刽宪,并且開放給外部應(yīng)用厘贼,這也是為什么叫“倉庫”,而不叫“工廠”的原因圣拄。

1) 基本特征

數(shù)據(jù)倉庫是面向主題的嘴秸、集成的、非易失的和時(shí)變的數(shù)據(jù)集合售担,用以支持管理決策赁遗。

面向主題:

傳統(tǒng)數(shù)據(jù)庫中,最大的特點(diǎn)是面向應(yīng)用進(jìn)行數(shù)據(jù)的組織族铆,各個(gè)業(yè)務(wù)系統(tǒng)可能是相互分離的岩四。而數(shù)據(jù)倉庫則是面向主題的。主題是一個(gè)抽象的概念哥攘,是較高層次上企業(yè)信息系統(tǒng)中的數(shù)據(jù)綜合剖煌、歸類并進(jìn)行分析利用的抽象。在邏輯意義上逝淹,它是對應(yīng)企業(yè)中某一宏觀分析領(lǐng)域所涉及的分析對象耕姊。

集成性:

通過對分散、獨(dú)立栅葡、異構(gòu)的數(shù)據(jù)庫數(shù)據(jù)進(jìn)行抽取茉兰、清理、轉(zhuǎn)換和匯總便得到了數(shù)據(jù)倉庫的數(shù)據(jù)欣簇,這樣保證了數(shù)據(jù)倉庫內(nèi)的數(shù)據(jù)關(guān)于整個(gè)企業(yè)的一致性规脸。

數(shù)據(jù)倉庫中的綜合數(shù)據(jù)不能從原有的數(shù)據(jù)庫系統(tǒng)直接得到。因此在數(shù)據(jù)進(jìn)入數(shù)據(jù)倉庫之前熊咽,必然要經(jīng)過統(tǒng)一與綜合莫鸭,這一步是數(shù)據(jù)倉庫建設(shè)中最關(guān)鍵、最復(fù)雜的一步横殴,所要完成的工作有:

要統(tǒng)一源數(shù)據(jù)中所有矛盾之處被因,如字段的同名異義、異名同義、單位不統(tǒng)一梨与、字長不一致堕花,等等。

進(jìn)行數(shù)據(jù)綜合和計(jì)算蛋欣。數(shù)據(jù)倉庫中的數(shù)據(jù)綜合工作可以在從原有數(shù)據(jù)庫抽取數(shù)據(jù)時(shí)生成航徙,但許多是在數(shù)據(jù)倉庫內(nèi)部生成的,即進(jìn)入數(shù)據(jù)倉庫以后進(jìn)行綜合生成的陷虎。

下圖說明一個(gè)保險(xiǎn)公司綜合數(shù)據(jù)的簡單處理過程到踏,其中數(shù)據(jù)倉庫中與“保險(xiǎn)” 主題有關(guān)的數(shù)據(jù)來自于多個(gè)不同的操作型系統(tǒng)。這些系統(tǒng)內(nèi)部數(shù)據(jù)的命名可能不同尚猿,數(shù)據(jù)格式也可能不同窝稿。把不同來源的數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)倉庫之前,需要去除這些不一致凿掂。

數(shù)倉主題

非易失性(不可更新性):

數(shù)據(jù)倉庫的數(shù)據(jù)反映的是一段相當(dāng)長的時(shí)間內(nèi)歷史數(shù)據(jù)的內(nèi)容伴榔,是不同時(shí)點(diǎn)的數(shù)據(jù)庫快照的集合,以及基于這些快照進(jìn)行統(tǒng)計(jì)庄萎、綜合和重組的導(dǎo)出數(shù)據(jù)踪少。

數(shù)據(jù)非易失性主要是針對應(yīng)用而言。數(shù)據(jù)倉庫的用戶對數(shù)據(jù)的操作大多是數(shù)據(jù)查詢或比較復(fù)雜的挖掘糠涛,一旦數(shù)據(jù)進(jìn)入數(shù)據(jù)倉庫以后援奢,一般情況下被較長時(shí)間保留。數(shù)據(jù)倉庫中一般有大量的查詢操作忍捡,但修改和刪除操作很少集漾。因此,數(shù)據(jù)經(jīng)加工和集成進(jìn)入數(shù)據(jù)倉庫后是極少更新的砸脊,通常只需要定期的加載和更新具篇。

時(shí)變性:

數(shù)據(jù)倉庫包含各種粒度的歷史數(shù)據(jù)。數(shù)據(jù)倉庫中的數(shù)據(jù)可能與某個(gè)特定日期凌埂、星期驱显、月份、季度或者年份有關(guān)瞳抓。數(shù)據(jù)倉庫的目的是通過分析企業(yè)過去一段時(shí)間業(yè)務(wù)的經(jīng)營狀況埃疫,挖掘其中隱藏的模式。雖然數(shù)據(jù)倉庫的用戶不能修改數(shù)據(jù)挨下,但并不是說數(shù)據(jù)倉庫的數(shù)據(jù)是永遠(yuǎn)不變的。分析的結(jié)果只能反映過去的情況脐湾,當(dāng)業(yè)務(wù)變化后臭笆,挖掘出的模式會(huì)失去時(shí)效性。因此數(shù)據(jù)倉庫的數(shù)據(jù)需要更新,以適應(yīng)決策的需要愁铺。從這個(gè)角度講鹰霍,數(shù)據(jù)倉庫建設(shè)是一個(gè)項(xiàng)目,更是一個(gè)過程茵乱。數(shù)據(jù)倉庫的數(shù)據(jù)隨時(shí)間的變化表現(xiàn)在以下幾個(gè)方面:

(1) 數(shù)據(jù)倉庫的數(shù)據(jù)時(shí)限一般要遠(yuǎn)遠(yuǎn)長于操作型數(shù)據(jù)的數(shù)據(jù)時(shí)限茂洒。

(2) 操作型系統(tǒng)存儲(chǔ)的是當(dāng)前數(shù)據(jù),而數(shù)據(jù)倉庫中的數(shù)據(jù)是歷史數(shù)據(jù)瓶竭。

(3) 數(shù)據(jù)倉庫中的數(shù)據(jù)是按照時(shí)間順序追加的督勺,它們都帶有時(shí)間屬性。

3. 為什么要有數(shù)據(jù)倉庫

先來看下數(shù)據(jù)倉庫的數(shù)據(jù)從哪里來斤贰,最終要到哪里去智哀?

通常數(shù)據(jù)倉庫的數(shù)據(jù)來自各個(gè)業(yè)務(wù)應(yīng)用系統(tǒng)。業(yè)務(wù)系統(tǒng)中的數(shù)據(jù)形式多種多樣荧恍,可能是 Oracle瓷叫、MySQL、SQL Server等關(guān)系數(shù)據(jù)庫里的結(jié)構(gòu)化數(shù)據(jù)送巡,可能是文本摹菠、CSV等平面文件或Word、Excel文檔中的數(shù)據(jù)骗爆,還可能是HTML次氨、XML等自描述的半結(jié)構(gòu)化數(shù)據(jù)。這些業(yè)務(wù)數(shù)據(jù)經(jīng)過一系列的數(shù)據(jù)抽取淮腾、轉(zhuǎn)換糟需、清洗,最終以一種統(tǒng)一的格式裝載進(jìn)數(shù)據(jù)倉庫谷朝。數(shù)據(jù)倉庫里的數(shù)據(jù)作為分析用的數(shù)據(jù)源洲押,提供給后面的即席查詢、 分析系統(tǒng)圆凰、數(shù)據(jù)集市杈帐、報(bào)表系統(tǒng)、數(shù)據(jù)挖掘系統(tǒng)等专钉。

這時(shí)我們就想了挑童,為什么不能把業(yè)務(wù)系統(tǒng)的數(shù)據(jù)直接拿來供即席查詢、分析系統(tǒng)跃须、報(bào)表系統(tǒng)等使用呢站叼,為什么要經(jīng)過數(shù)據(jù)倉庫這一步?實(shí)際上在數(shù)倉出現(xiàn)之前菇民,確實(shí)是這么做的尽楔,但是有很多數(shù)據(jù)分析的先驅(qū)者當(dāng)時(shí)已經(jīng)發(fā)現(xiàn)投储,簡單的“直接訪問”方式很難良好工作,這樣做的失敗案例數(shù)不勝數(shù)阔馋。下面列舉一些直接訪問業(yè)務(wù)系統(tǒng)無法工作的原因:

某些業(yè)務(wù)數(shù)據(jù)由于安全或其他因素不能直接訪問玛荞。

業(yè)務(wù)系統(tǒng)的版本變更很頻繁,每次變更都需要重寫分析系統(tǒng)并重新測試呕寝。

很難建立和維護(hù)匯總數(shù)據(jù)來源于多個(gè)業(yè)務(wù)系統(tǒng)版本的報(bào)表勋眯。

業(yè)務(wù)系統(tǒng)的列名通常是硬編碼,有時(shí)僅僅是無意義的字符串下梢,這讓編寫分析系統(tǒng)更加困難客蹋。

業(yè)務(wù)系統(tǒng)的數(shù)據(jù)格式,如日期怔球、數(shù)字的格式不統(tǒng)一嚼酝。

業(yè)務(wù)系統(tǒng)的表結(jié)構(gòu)為事務(wù)處理性能而優(yōu)化,有時(shí)并不適合查詢與分析竟坛。

沒有適當(dāng)?shù)姆绞綄⒂袃r(jià)值的數(shù)據(jù)合并進(jìn)特定應(yīng)用的數(shù)據(jù)庫闽巩。

沒有適當(dāng)?shù)奈恢么鎯?chǔ)元數(shù)據(jù)。

用戶需要看到的顯示數(shù)據(jù)字段担汤,有時(shí)在數(shù)據(jù)庫中并不存在涎跨。

通常事務(wù)處理的優(yōu)先級比分析系統(tǒng)高,所以如果分析系統(tǒng)和事務(wù)處理運(yùn)行在同一硬件之上崭歧,分析系統(tǒng)往往性能很差隅很。

有誤用業(yè)務(wù)數(shù)據(jù)的風(fēng)險(xiǎn)。

極有可能影響業(yè)務(wù)系統(tǒng)的性能率碾。

盡管需要增加軟硬件的投入叔营,但建立獨(dú)立數(shù)據(jù)倉庫與直接訪問業(yè)務(wù)數(shù)據(jù)相比,無論是成本還是帶來的好處所宰,這樣做都是值得的绒尊。隨著處理器和存儲(chǔ)成本的逐年降低译暂,數(shù)據(jù)倉庫方案的優(yōu)勢更加明顯册倒,在經(jīng)濟(jì)上也更具可行性。

4. 數(shù)據(jù)倉庫與數(shù)據(jù)庫的區(qū)別

數(shù)據(jù)庫與數(shù)據(jù)倉庫的區(qū)別實(shí)際講的是 OLTP 與 OLAP 的區(qū)別寂诱。

操作型處理躯泰,叫聯(lián)機(jī)事務(wù)處理 OLTP(On-Line Transaction Processing谭羔,),也可以稱面向交易的處理系統(tǒng)麦向,它是針對具體業(yè)務(wù)在數(shù)據(jù)庫聯(lián)機(jī)的日常操作瘟裸,通常對少數(shù)記錄進(jìn)行查詢、修改诵竭。用戶較為關(guān)心操作的響應(yīng)時(shí)間话告、數(shù)據(jù)的安全性十办、完整性和并發(fā)支持的用戶數(shù)等問題。傳統(tǒng)的數(shù)據(jù)庫系統(tǒng)作為數(shù)據(jù)管理的主要手段超棺,主要用于操作型處理,像Mysql呵燕,Oracle等關(guān)系型數(shù)據(jù)庫一般屬于OLTP棠绘。

分析型處理,叫聯(lián)機(jī)分析處理 OLAP(On-Line Analytical Processing)一般針對某些主題的歷史數(shù)據(jù)進(jìn)行分析再扭,支持管理決策氧苍。

首先要明白,數(shù)據(jù)倉庫的出現(xiàn)泛范,并不是要取代數(shù)據(jù)庫让虐。數(shù)據(jù)庫是面向事務(wù)的設(shè)計(jì),數(shù)據(jù)倉庫是面向主題設(shè)計(jì)的罢荡。數(shù)據(jù)庫一般存儲(chǔ)業(yè)務(wù)數(shù)據(jù)赡突,數(shù)據(jù)倉庫存儲(chǔ)的一般是歷史數(shù)據(jù)。

數(shù)據(jù)庫設(shè)計(jì)是盡量避免冗余区赵,一般針對某一業(yè)務(wù)應(yīng)用進(jìn)行設(shè)計(jì)惭缰,比如一張簡單的User表,記錄用戶名笼才、密碼等簡單數(shù)據(jù)即可漱受,符合業(yè)務(wù)應(yīng)用,但是不符合分析骡送。數(shù)據(jù)倉庫在設(shè)計(jì)是有意引入冗余昂羡,依照分析需求,分析維度摔踱、分析指標(biāo)進(jìn)行設(shè)計(jì)虐先。

數(shù)據(jù)庫是為捕獲數(shù)據(jù)而設(shè)計(jì),數(shù)據(jù)倉庫是為分析數(shù)據(jù)而設(shè)計(jì)昌渤。

以銀行業(yè)務(wù)為例赴穗。數(shù)據(jù)庫是事務(wù)系統(tǒng)的數(shù)據(jù)平臺(tái),客戶在銀行做的每筆交易都會(huì)寫入數(shù)據(jù)庫膀息,被記錄下來般眉,這里,可以簡單地理解為用數(shù)據(jù)庫記賬潜支。數(shù)據(jù)倉庫是分析系統(tǒng)的數(shù)據(jù)平臺(tái)甸赃,它從事務(wù)系統(tǒng)獲取數(shù)據(jù),并做匯總冗酿、加工埠对,為決策者提供決策的依據(jù)络断。比如,某銀行某分行一個(gè)月發(fā)生多少交易项玛,該分行當(dāng)前存款余額是多少貌笨。如果存款又多,消費(fèi)交易又多襟沮,那么該地區(qū)就有必要設(shè)立ATM了锥惋。

顯然,銀行的交易量是巨大的开伏,通常以百萬甚至千萬次來計(jì)算膀跌。事務(wù)系統(tǒng)是實(shí)時(shí)的,這就要求時(shí)效性固灵,客戶存一筆錢需要幾十秒是無法忍受的捅伤,這就要求數(shù)據(jù)庫只能存儲(chǔ)很短一段時(shí)間的數(shù)據(jù)。而分析系統(tǒng)是事后的巫玻,它要提供關(guān)注時(shí)間段內(nèi)所有的有效數(shù)據(jù)丛忆。這些數(shù)據(jù)是海量的,匯總計(jì)算起來也要慢一些仍秤,但是蘸际,只要能夠提供有效的分析數(shù)據(jù)就達(dá)到目的了。

數(shù)據(jù)倉庫徒扶,是在數(shù)據(jù)庫已經(jīng)大量存在的情況下粮彤,為了進(jìn)一步挖掘數(shù)據(jù)資源、為了決策需要而產(chǎn)生的姜骡,它決不是所謂的“大型數(shù)據(jù)庫”导坟。

5. ?數(shù)據(jù)倉庫分層架構(gòu)

按照數(shù)據(jù)流入流出的過程,數(shù)據(jù)倉庫架構(gòu)可分為:源數(shù)據(jù)圈澈、數(shù)據(jù)倉庫惫周、數(shù)據(jù)應(yīng)用

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

數(shù)據(jù)倉庫的數(shù)據(jù)來源于不同的源數(shù)據(jù),并提供多樣的數(shù)據(jù)應(yīng)用康栈,數(shù)據(jù)自下而上流入數(shù)據(jù)倉庫后向上層開放應(yīng)用递递,而數(shù)據(jù)倉庫只是中間集成化數(shù)據(jù)管理的一個(gè)平臺(tái)。

源數(shù)據(jù):此層數(shù)據(jù)無任何更改啥么,直接沿用外圍系統(tǒng)數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)登舞,不對外開放;為臨時(shí)存儲(chǔ)層悬荣,是接口數(shù)據(jù)的臨時(shí)存儲(chǔ)區(qū)域菠秒,為后一步的數(shù)據(jù)處理做準(zhǔn)備。

數(shù)據(jù)倉庫:也稱為細(xì)節(jié)層氯迂,DW層的數(shù)據(jù)應(yīng)該是一致的践叠、準(zhǔn)確的言缤、干凈的數(shù)據(jù),即對源系統(tǒng)數(shù)據(jù)進(jìn)行了清洗(去除了雜質(zhì))后的數(shù)據(jù)禁灼。

數(shù)據(jù)應(yīng)用:前端應(yīng)用直接讀取的數(shù)據(jù)源管挟;根據(jù)報(bào)表、專題分析需求而計(jì)算生成的數(shù)據(jù)弄捕。

數(shù)據(jù)倉庫從各數(shù)據(jù)源獲取數(shù)據(jù)及在數(shù)據(jù)倉庫內(nèi)的數(shù)據(jù)轉(zhuǎn)換和流動(dòng)都可以認(rèn)為是ETL(抽取Extra, 轉(zhuǎn)化Transfer, 裝載Load)的過程哮独,ETL是數(shù)據(jù)倉庫的流水線,也可以認(rèn)為是數(shù)據(jù)倉庫的血液察藐,它維系著數(shù)據(jù)倉庫中數(shù)據(jù)的新陳代謝,而數(shù)據(jù)倉庫日常的管理和維護(hù)工作的大部分精力就是保持ETL的正常和穩(wěn)定舟扎。

那么為什么要數(shù)據(jù)倉庫進(jìn)行分層呢?

用空間換時(shí)間分飞,通過大量的預(yù)處理來提升應(yīng)用系統(tǒng)的用戶體驗(yàn)(效率),因此數(shù)據(jù)倉庫會(huì)存在大量冗余的數(shù)據(jù)睹限;不分層的話譬猫,如果源業(yè)務(wù)系統(tǒng)的業(yè)務(wù)規(guī)則發(fā)生變化將會(huì)影響整個(gè)數(shù)據(jù)清洗過程,工作量巨大羡疗。

通過數(shù)據(jù)分層管理可以簡化數(shù)據(jù)清洗的過程染服,因?yàn)榘言瓉硪徊降墓ぷ鞣值搅硕鄠€(gè)步驟去完成,相當(dāng)于把一個(gè)復(fù)雜的工作拆成了多個(gè)簡單的工作叨恨,把一個(gè)大的黑盒變成了一個(gè)白盒柳刮,每一層的處理邏輯都相對簡單和容易理解,這樣我們比較容易保證每一個(gè)步驟的正確性痒钝,當(dāng)數(shù)據(jù)發(fā)生錯(cuò)誤的時(shí)候秉颗,往往我們只需要局部調(diào)整某個(gè)步驟即可。

6. 主要數(shù)據(jù)倉庫架構(gòu)

通過上面的內(nèi)容我們大概了解數(shù)倉的概念送矩,接下來就看下數(shù)倉的幾種演進(jìn)架構(gòu)蚕甥。

1. 數(shù)據(jù)集市架構(gòu)

數(shù)據(jù)集市是按主題域組織的數(shù)據(jù)集合,用于支持部門級的決策栋荸。有兩種類型的數(shù)據(jù)集市:獨(dú)立數(shù)據(jù)集市從屬數(shù)據(jù)集市菇怀。

1) 獨(dú)立數(shù)據(jù)集市

獨(dú)立數(shù)據(jù)集市集中于部門所關(guān)心的單一主題域,數(shù)據(jù)以部門為基礎(chǔ)部署晌块,無須考慮企業(yè)級別的信息共享與集成爱沟。例如,制造部門匆背、人力資源部門和其他部門都各自有他們自己的數(shù)據(jù)集市钥顽。

優(yōu)點(diǎn):因?yàn)橐粋€(gè)部門的業(yè)務(wù)相對于整個(gè)企業(yè)要簡單,數(shù)據(jù)量也小得多靠汁,所以部門的獨(dú)立數(shù)據(jù)集市具有周期短蜂大、見效快的特點(diǎn)闽铐。

缺點(diǎn)

從業(yè)務(wù)角度看,當(dāng)部門的分析需求擴(kuò)展奶浦,或者需要分析跨部門或跨主題域的數(shù)據(jù)時(shí)兄墅,獨(dú)立數(shù)據(jù)市場會(huì)顯得力不從心。

當(dāng)數(shù)據(jù)存在歧義澳叉,比如同一個(gè)產(chǎn)品隙咸,在A部門和B部門的定義不同時(shí),將無法在部門間進(jìn)行信息比較成洗。

每個(gè)部門使用不同的技術(shù)五督,建立不同的ETL的過程,處理不同的事務(wù)系統(tǒng)瓶殃,而在多個(gè)獨(dú)立的數(shù)據(jù)集市之間還會(huì)存在數(shù)據(jù)的交叉與重疊充包,甚至?xí)袛?shù)據(jù)不一致的情況。

2) 從屬數(shù)據(jù)集市

從屬數(shù)據(jù)集市的數(shù)據(jù)來源于數(shù)據(jù)倉庫遥椿。數(shù)據(jù)倉庫里的數(shù)據(jù)經(jīng)過整合基矮、重構(gòu)、匯總后傳遞給從屬數(shù)據(jù)集市冠场。

建立從屬數(shù)據(jù)集市的好處主要有:

性能:當(dāng)數(shù)據(jù)倉庫的查詢性能出現(xiàn)問題家浇,可以考慮建立幾個(gè)從屬數(shù)據(jù)集市,將查詢從數(shù)據(jù)倉庫移出到數(shù)據(jù)集市碴裙。

安全:每個(gè)部門可以完全控制他們自己的數(shù)據(jù)钢悲。

數(shù)據(jù)一致:因?yàn)槊總€(gè)數(shù)據(jù)集市的數(shù)據(jù)來源都是同一個(gè)數(shù)據(jù)倉庫,有效消除了數(shù)據(jù)不一致的情況舔株。

2. Inmon企業(yè)工廠架構(gòu)

上圖的前兩步不過多介紹譬巫,直接從第三步開始。

企業(yè)級數(shù)據(jù)倉庫:是該架構(gòu)中的核心組件督笆。正如Inmon數(shù)據(jù)倉庫所定義的芦昔,企業(yè)級數(shù)據(jù)倉庫是一個(gè)細(xì)節(jié)數(shù)據(jù)的集成資源庫。其中的數(shù)據(jù)以最低粒度級別被捕獲娃肿,存儲(chǔ)在滿足三范式設(shè)計(jì)的關(guān)系數(shù)據(jù)庫中咕缎。

部門級數(shù)據(jù)集市:是面向主題數(shù)據(jù)的部門級視圖,數(shù)據(jù)從企業(yè)級數(shù)據(jù)倉庫獲取料扰。數(shù)據(jù)在進(jìn)入部門數(shù)據(jù)集市時(shí)可能進(jìn)行聚合凭豪。數(shù)據(jù)集市使用多維模型設(shè)計(jì),用于數(shù)據(jù)分析晒杈。重要的一點(diǎn)是嫂伞,所有的報(bào)表工具、BI工具或其他數(shù)據(jù)分析應(yīng)用都從數(shù)據(jù)集市查詢數(shù)據(jù),而不是直接查詢企業(yè)級數(shù)據(jù)倉庫帖努。

3. Kimball數(shù)據(jù)倉庫架構(gòu)

對比上一張圖可以看到撰豺,Kimball與Inmon兩種架構(gòu)的主要區(qū)別在于核心數(shù)據(jù)倉庫的設(shè)計(jì)和建立。

Kimball的數(shù)據(jù)倉庫包含高粒度的企業(yè)數(shù)據(jù)拼余,使用多維模型設(shè)計(jì)污桦,這也意味著數(shù)據(jù)倉庫由星型模式的維度表和事實(shí)表構(gòu)成。分析系統(tǒng)或報(bào)表工具可以直接訪問多維數(shù)據(jù)倉庫里的數(shù)據(jù)匙监。

在此架構(gòu)中的數(shù)據(jù)集市也與Inmon中的不同凡橱。這里的數(shù)據(jù)集市是一個(gè)邏輯概念,只是多維數(shù)據(jù)倉庫中的主題域劃分亭姥,并沒有自己的物理存儲(chǔ)稼钩,也可以說是虛擬的數(shù)據(jù)集市。

4. 混合型數(shù)據(jù)倉庫架構(gòu)

所謂的混合型結(jié)構(gòu)达罗,指的是在一個(gè)數(shù)據(jù)倉庫環(huán)境中坝撑,聯(lián)合使用Inmon和Kimball兩種架構(gòu)

從架構(gòu)圖可以看到氮块,這種架構(gòu)將Inmon方法中的數(shù)據(jù)集市部分替換成了一個(gè)多維數(shù)據(jù)倉庫,而數(shù)據(jù)集市則是多維數(shù)據(jù)倉庫上的邏輯視圖诡宗。

使用這種架構(gòu)的好處是:既可以利用規(guī)范化設(shè)計(jì)消除數(shù)據(jù)冗余滔蝉,保證數(shù)據(jù)的粒度足夠細(xì);又可以利用多維結(jié)構(gòu)更靈活地在企業(yè)級實(shí)現(xiàn)報(bào)表和分析塔沃。

7. 數(shù)據(jù)倉庫元數(shù)據(jù)的管理

元數(shù)據(jù)(Meta Date)蝠引,主要記錄數(shù)據(jù)倉庫中模型的定義、各層級間的映射關(guān)系蛀柴、監(jiān)控?cái)?shù)據(jù)倉庫的數(shù)據(jù)狀態(tài)及ETL的任務(wù)運(yùn)行狀態(tài)螃概。一般會(huì)通過元數(shù)據(jù)資料庫(Metadata Repository)來統(tǒng)一地存儲(chǔ)和管理元數(shù)據(jù),其主要目的是使數(shù)據(jù)倉庫的設(shè)計(jì)鸽疾、部署吊洼、操作和管理能達(dá)成協(xié)同和一致。

元數(shù)據(jù)是數(shù)據(jù)倉庫管理系統(tǒng)的重要組成部分制肮,元數(shù)據(jù)管理是企業(yè)級數(shù)據(jù)倉庫中的關(guān)鍵組件冒窍,貫穿數(shù)據(jù)倉庫構(gòu)建的整個(gè)過程,直接影響著數(shù)據(jù)倉庫的構(gòu)建豺鼻、使用和維護(hù)综液。

構(gòu)建數(shù)據(jù)倉庫的主要步驟之一是ETL。這時(shí)元數(shù)據(jù)將發(fā)揮重要的作用儒飒,它定義了源數(shù)據(jù)系統(tǒng)到數(shù)據(jù)倉庫的映射谬莹、數(shù)據(jù)轉(zhuǎn)換的規(guī)則、數(shù)據(jù)倉庫的邏輯結(jié)構(gòu)、數(shù)據(jù)更新的規(guī)則附帽、數(shù)據(jù)導(dǎo)入歷史記錄以及裝載周期等相關(guān)內(nèi)容埠戳。數(shù)據(jù)抽取和轉(zhuǎn)換的專家以及數(shù)據(jù)倉庫管理員正是通過元數(shù)據(jù)高效地構(gòu)建數(shù)據(jù)倉庫。

用戶在使用數(shù)據(jù)倉庫時(shí)士葫,通過元數(shù)據(jù)訪問數(shù)據(jù)乞而,明確數(shù)據(jù)項(xiàng)的含義以及定制報(bào)表。

數(shù)據(jù)倉庫的規(guī)模及其復(fù)雜性離不開正確的元數(shù)據(jù)管理慢显,包括增加或移除外部數(shù)據(jù)源爪模,改變數(shù)據(jù)清洗方法,控制出錯(cuò)的查詢以及安排備份等荚藻。

元數(shù)據(jù)可分為技術(shù)元數(shù)據(jù)和業(yè)務(wù)元數(shù)據(jù)屋灌。技術(shù)元數(shù)據(jù)為開發(fā)和管理數(shù)據(jù)倉庫的IT 人員使用,它描述了與數(shù)據(jù)倉庫開發(fā)应狱、管理和維護(hù)相關(guān)的數(shù)據(jù)共郭,包括數(shù)據(jù)源信息、數(shù)據(jù)轉(zhuǎn)換描述疾呻、數(shù)據(jù)倉庫模型除嘹、數(shù)據(jù)清洗與更新規(guī)則、數(shù)據(jù)映射和訪問權(quán)限等岸蜗。而業(yè)務(wù)元數(shù)據(jù)為管理層和業(yè)務(wù)分析人員服務(wù)尉咕,從業(yè)務(wù)角度描述數(shù)據(jù),包括商務(wù)術(shù)語璃岳、數(shù)據(jù)倉庫中有什么數(shù)據(jù)年缎、數(shù)據(jù)的位置和數(shù)據(jù)的可用性等,幫助業(yè)務(wù)人員更好地理解數(shù)據(jù)倉庫中哪些數(shù)據(jù)是可用的以及如何使用铃慷。

由上可見单芜,元數(shù)據(jù)不僅定義了數(shù)據(jù)倉庫中數(shù)據(jù)的模式、來源犁柜、抽取和轉(zhuǎn)換規(guī)則等洲鸠,而且是整個(gè)數(shù)據(jù)倉庫系統(tǒng)運(yùn)行的基礎(chǔ),元數(shù)據(jù)把數(shù)據(jù)倉庫系統(tǒng)中各個(gè)松散的組件聯(lián)系起來馋缅,組成了一個(gè)有機(jī)的整體坛怪。

8. 數(shù)倉常見術(shù)語解析

本小節(jié)結(jié)構(gòu)如下圖所示:

1. 數(shù)倉名詞解釋

1. 實(shí)體

實(shí)體是指依附的主體,就是我們分析的一個(gè)對象股囊,比如我們分析商品的銷售情況袜匿,如華為手機(jī)近半年的銷售量是多少,那華為手機(jī)就是一個(gè)實(shí)體稚疹;我們分析用戶的活躍度居灯,用戶就是一個(gè)實(shí)體祭务。當(dāng)然實(shí)體也可以現(xiàn)實(shí)中不存在的,比如虛擬的業(yè)務(wù)對象怪嫌,活動(dòng)义锥,會(huì)員等都可看做一個(gè)實(shí)體。

實(shí)體的存在是為了業(yè)務(wù)分析岩灭,作為分析的一個(gè)篩選的維度拌倍,擁有描述自己的屬性,本身具有可分析的價(jià)值噪径。

2. 維度

維度就是看待問題的角度柱恤,分析業(yè)務(wù)數(shù)據(jù),從什么角度分析找爱,就建立什么樣的維度梗顺。所以維度就是要對數(shù)據(jù)進(jìn)行分析時(shí)所用的一個(gè)量,比如你要分析產(chǎn)品銷售情況车摄,你可以選擇按商品類別來進(jìn)行分析寺谤,這就構(gòu)成一個(gè)維度,把所有商品類別集合在一起吮播,就構(gòu)成了維度表变屁。

3. 度量

度量是業(yè)務(wù)流程節(jié)點(diǎn)上的一個(gè)數(shù)值。比如銷量意狠,價(jià)格粟关,成本等等。

事實(shí)表中的度量可分為三類:完全可加摄职,半可加誊役,不可加获列。

完全可加的度量是最靈活谷市,最有用的,比如說銷量击孩,銷售額等迫悠,可進(jìn)行任意維度匯總;

半可加的度量可以對某些維度匯總巩梢,但不能對所有維度匯總创泄,差額是常見的半可加度量,它除了時(shí)間維度外括蝠,可以跨所有維度進(jìn)行加法操作鞠抑;

還有一種是完全不可加的,例如:比率忌警。對于這類非可加度量搁拙,一種好的方法是,盡可能存儲(chǔ)非可加度量的完全可加分量,并在計(jì)算出最終的非可加事實(shí)前箕速,將這些分量匯總到最終的結(jié)果集中同云。

4. 粒度

粒度就是業(yè)務(wù)流程中對度量的單位褪迟,比如商品是按件記錄度量,還是按批記錄度量。

在數(shù)倉建設(shè)中如暖,我們說這是用戶粒度的事實(shí)表,那么表中每行數(shù)據(jù)都是一個(gè)用戶绑榴,無重復(fù)用戶邢滑;例如還有銷售粒度的表,那么表中每行都是一條銷售記錄募谎。

選擇合適的粒度級別是數(shù)據(jù)倉庫建設(shè)好壞的重要關(guān)鍵內(nèi)容扶关,在設(shè)計(jì)數(shù)據(jù)粒度時(shí),通常需重點(diǎn)考慮以下因素:

要接受的分析類型数冬、可接受的數(shù)據(jù)最低粒度和能存儲(chǔ)的數(shù)據(jù)量节槐;

粒度的層次定義越高,就越不能在該倉庫中進(jìn)行更細(xì)致的分析拐纱;

如果存儲(chǔ)資源有一定的限制铜异,就只能采用較高的數(shù)據(jù)粒度劃分;

數(shù)據(jù)粒度劃分策略一定要保證:數(shù)據(jù)的粒度確實(shí)能夠滿足用戶的決策分析需要秸架,這是數(shù)據(jù)粒度劃分策略中最重要的一個(gè)準(zhǔn)則揍庄。

5. 口徑

口徑就是取數(shù)邏輯(如何取數(shù)的),比如要取的數(shù)是10歲以下兒童中男孩的平均身高东抹,這就是統(tǒng)計(jì)的口徑蚂子。

6. 指標(biāo)

指標(biāo)是口徑的衡量值,也就是最后的結(jié)果缭黔。比如最近七天的訂單量食茎,一個(gè)促銷活動(dòng)的購買轉(zhuǎn)化率等。

一個(gè)指標(biāo)具體到計(jì)算實(shí)施馏谨,主要有以下幾部分組成:

指標(biāo)加工邏輯别渔,比如count ,sum, avg

維度,比如按部門惧互、地域進(jìn)行指標(biāo)統(tǒng)計(jì)哎媚,對應(yīng)sql中的group by

業(yè)務(wù)限定/修飾詞,比如以不同的支付渠道來算對應(yīng)的指標(biāo)喊儡,微信支付的訂單退款率拨与,支付寶支付的訂單退款率 。對應(yīng)sql中的where艾猜。

除此之外买喧,指標(biāo)本身還可以衍生攀甚、派生出更多的指標(biāo),基于這些特點(diǎn)岗喉,可以將指標(biāo)進(jìn)行分類:

原子指標(biāo):基本業(yè)務(wù)事實(shí)秋度,沒有業(yè)務(wù)限定、沒有維度钱床。比如訂單表中的訂單量荚斯、訂單總金額都算原子指標(biāo);

業(yè)務(wù)方更關(guān)心的指標(biāo)查牌,是有實(shí)際業(yè)務(wù)含義事期,可以直接取數(shù)據(jù)的指標(biāo)。比如店鋪近1天訂單支付金額就是一個(gè)派生指標(biāo)纸颜,會(huì)被直接在產(chǎn)品上展示給商家看兽泣。

但是這個(gè)指標(biāo)卻不能直接從數(shù)倉的統(tǒng)一中間層里取數(shù)(因?yàn)闆]有現(xiàn)成的事實(shí)字段,數(shù)倉提供的一般都是大寬表)胁孙。需要有一個(gè)橋梁連接數(shù)倉中間層和業(yè)務(wù)方的指標(biāo)需求唠倦,于是便有了派生指標(biāo)

派生指標(biāo):維度+修飾詞+原子指標(biāo)。店鋪近1天訂單支付金額中店鋪是維度涮较,近1天是一個(gè)時(shí)間類型的修飾詞稠鼻,支付金額是一個(gè)原子指標(biāo);

維度:觀察各項(xiàng)指標(biāo)的角度狂票;

修飾詞:維度的一個(gè)或某些值候齿,比如維度性別下,男和女就是2種修飾詞闺属。

衍生指標(biāo):比如某一個(gè)促銷活動(dòng)的轉(zhuǎn)化率就是衍生指標(biāo)慌盯,因?yàn)樾枰黉N投放人數(shù)指標(biāo)和促銷訂單數(shù)指標(biāo)進(jìn)行計(jì)算得出。

7. 標(biāo)簽

標(biāo)簽是人為設(shè)定的掂器、根據(jù)業(yè)務(wù)場景需求亚皂,對目標(biāo)對象運(yùn)用一定的算法得到的高度精煉的特征標(biāo)識(shí)“ω遥可見標(biāo)簽是經(jīng)過人為再加工后的結(jié)果孕讳,如網(wǎng)紅匠楚、白富美巍膘、蘿莉。對于有歧義的標(biāo)簽芋簿,我們內(nèi)部可進(jìn)行標(biāo)簽區(qū)分峡懈,比如:蘋果,我們可以定義蘋果指的是水果与斤,蘋果手機(jī)才指的是手機(jī)肪康。

8. 自然鍵

由現(xiàn)實(shí)中已經(jīng)存在的屬性組成的鍵荚恶,它在業(yè)務(wù)概念中是唯一的,并具有一定的業(yè)務(wù)含義磷支,比如商品ID谒撼,員工ID。

以數(shù)倉角度看雾狈,來自于業(yè)務(wù)系統(tǒng)的標(biāo)識(shí)符就是自然鍵廓潜,比如業(yè)務(wù)庫中員工的編號(hào)。

9. 持久鍵

保持永久性不會(huì)發(fā)生變化善榛。有時(shí)也被叫做超自然持久鍵辩蛋。比如身份證號(hào)屬于持久鍵。

自然鍵和持久鍵區(qū)別:舉個(gè)例子就明白了移盆,比如說公司員工離職之后又重新入職悼院,他的自然鍵也就是員工編號(hào)發(fā)生了變化,但是他的持久鍵身份證號(hào)是不變的咒循。

10. 代理鍵

就是不具有業(yè)務(wù)含義的鍵据途。代理鍵有許多其他的稱呼:無意義鍵、整數(shù)鍵叙甸、非自然鍵昨凡、人工鍵、合成鍵等蚁署。

代理鍵就是簡單的以按照順序序列生產(chǎn)的整數(shù)表示便脊。產(chǎn)品行的第1行代理鍵為1,則下一行的代理鍵為2光戈,如此進(jìn)行哪痰。代理鍵的作用僅僅是連接維度表和事實(shí)表

11. 退化維度

退化維度久妆,就是那些看起來像是事實(shí)表的一個(gè)維度關(guān)鍵字晌杰,但實(shí)際上并沒有對應(yīng)的維度表,就是維度屬性存儲(chǔ)到事實(shí)表中筷弦,這種存儲(chǔ)到事實(shí)表中的維度列被稱為退化維度肋演。與其他存儲(chǔ)在維表中的維度一樣,退化維度也可以用來進(jìn)行事實(shí)表的過濾查詢烂琴、實(shí)現(xiàn)聚合操作等爹殊。

那么究竟怎么定義退化維度呢?比如說訂單id奸绷,這種量級很大的維度梗夸,沒必要用一張維度表來進(jìn)行存儲(chǔ),而我們進(jìn)行數(shù)據(jù)查詢或者數(shù)據(jù)過濾的時(shí)候又非常需要号醉,所以這種就冗余在事實(shí)表里面反症,這種就叫退化維度辛块,citycode這種我們也會(huì)冗余在事實(shí)表里面,但是它有對應(yīng)的維度表铅碍,所以它不是退化維度润绵。

12. 下鉆

這是在數(shù)據(jù)分析中常見的概念,下鉆可以理解成增加維的層次胞谈,從而可以由粗粒度到細(xì)粒度來觀察數(shù)據(jù)授药,比如對產(chǎn)品銷售情況分析時(shí),可以沿著時(shí)間維從年到月到日更細(xì)粒度的觀察數(shù)據(jù)呜魄。從年的維度可以下鉆到月的維度悔叽、日的維度等。

13. 上卷

知道了下鉆爵嗅,上卷就容易理解了娇澎,它倆是相逆的操作,所以上卷可以理解為刪掉維的某些層睹晒,由細(xì)粒度到粗粒度觀察數(shù)據(jù)的操作或沿著維的層次向上聚合匯總數(shù)據(jù)趟庄。

14. 數(shù)據(jù)集市

數(shù)據(jù)集市(Data Mart),也叫數(shù)據(jù)市場伪很,數(shù)據(jù)集市就是滿足特定的部門或者用戶的需求戚啥,按照多維的方式進(jìn)行存儲(chǔ),包括定義維度锉试、需要計(jì)算的指標(biāo)猫十、維度的層次等,生成面向決策分析需求的數(shù)據(jù)立方體呆盖。其實(shí)就是從數(shù)據(jù)倉庫中抽取出來的一個(gè)小合集拖云。

2. 數(shù)倉名詞之間關(guān)系

1. 實(shí)體表,事實(shí)表应又,維度表之間的關(guān)系

在Kimball維度建模中有維度與事實(shí)宙项,在Inmon范式建模中有實(shí)體與關(guān)系,如果我們分開兩種建模方式看這些概念比較容易理解株扛。但是目前也出現(xiàn)了不少混合建模方式尤筐,兩種建模方式結(jié)合起來看,這些概念是不是容易記憶混亂洞就,尤其事實(shí)表和實(shí)體表盆繁,它們之間到底有怎樣區(qū)別與聯(lián)系,先看下它們各自概念:

維度表:維度表可以看成是用戶用來分析一個(gè)事實(shí)的窗口奖磁,它里面的數(shù)據(jù)應(yīng)該是對事實(shí)的各個(gè)方面描述改基,比如時(shí)間維度表繁疤,地域維度表咖为,維度表是事實(shí)表的一個(gè)分析角度秕狰。

事實(shí)表:事實(shí)表其實(shí)就是通過各種維度和一些指標(biāo)值的組合來確定一個(gè)事實(shí)的,比如通過時(shí)間維度躁染,地域組織維度鸣哀,指標(biāo)值可以去確定在某時(shí)某地的一些指標(biāo)值怎么樣的事實(shí)。事實(shí)表的每一條數(shù)據(jù)都是幾條維度表的數(shù)據(jù)和指標(biāo)值交匯而得到的吞彤。

實(shí)體表:實(shí)體表就是一個(gè)實(shí)際對象的表我衬,實(shí)體表放的數(shù)據(jù)一定是一條條客觀存在的事物數(shù)據(jù),比如說各種商品饰恕,它就是客觀存在的挠羔,所以可以將其設(shè)計(jì)一個(gè)實(shí)體表。實(shí)時(shí)表只描述各個(gè)事物埋嵌,并不存在具體的事實(shí)破加,所以也有人稱實(shí)體表是無事實(shí)的事實(shí)表。

舉個(gè)例子:比如說手機(jī)商場中有蘋果手機(jī)雹嗦,華為手機(jī)等各品牌各型號(hào)的手機(jī)范舀,這些數(shù)據(jù)可以組成一個(gè)手機(jī)實(shí)體表,但是表中沒有可度量的數(shù)據(jù)了罪。某天蘋果手機(jī)賣了15臺(tái)锭环,華為手機(jī)賣了20臺(tái),這些手機(jī)銷售數(shù)據(jù)屬于事實(shí)泊藕,組成一個(gè)事實(shí)表辅辩。這樣就可以使用日期維度表地域維度表對這個(gè)事實(shí)表進(jìn)行各種維度分析。

2. 指標(biāo)與標(biāo)簽的區(qū)別

概念不同

指標(biāo)是用來定義娃圆、評價(jià)和描述特定事物的一種標(biāo)準(zhǔn)或方式汽久。比如:新增用戶數(shù)、累計(jì)用戶數(shù)踊餐、用戶活躍率等是衡量用戶發(fā)展情況的指標(biāo)景醇;

標(biāo)簽是人為設(shè)定的、根據(jù)業(yè)務(wù)場景需求吝岭,對目標(biāo)對象運(yùn)用一定的算法得到的高度精煉的特征標(biāo)識(shí)三痰。可見標(biāo)簽是經(jīng)過人為再加工后的結(jié)果窜管,如網(wǎng)紅散劫、白富美、蘿莉幕帆。

構(gòu)成不同

指標(biāo)名稱是對事物質(zhì)與量兩方面特點(diǎn)的命名获搏;指標(biāo)取值是指標(biāo)在具體時(shí)間、地域失乾、條件下的數(shù)量表現(xiàn)常熙,如人的體重纬乍,指標(biāo)名稱是體重,指標(biāo)的取值就是120斤裸卫;

標(biāo)簽名稱通常都是形容詞或形容詞+名詞的結(jié)構(gòu)仿贬,標(biāo)簽一般是不可量化的,通常是孤立的墓贿,除了基礎(chǔ)類標(biāo)簽茧泪,通過一定算法加工出來的標(biāo)簽一般都沒有單位和量綱。如將超過200斤的稱為大胖子聋袋。

分類不同

對指標(biāo)的分類

按照指標(biāo)計(jì)算邏輯队伟,可以將指標(biāo)分為原子指標(biāo)、派生指標(biāo)幽勒、衍生指標(biāo)三種類型缰泡;

按照對事件描述內(nèi)容的不同,分為過程性指標(biāo)和結(jié)果性指標(biāo)代嗤;

對標(biāo)簽的分類

按照標(biāo)簽的變化性分為靜態(tài)標(biāo)簽和動(dòng)態(tài)標(biāo)簽棘钞;

按照標(biāo)簽的指代和評估指標(biāo)的不同,可分為定性標(biāo)簽和定量標(biāo)簽干毅;

指標(biāo)最擅長的應(yīng)用是監(jiān)測宜猜、分析、評價(jià)和建模硝逢。

標(biāo)簽最擅長的應(yīng)用是標(biāo)注姨拥、刻畫、分類和特征提取渠鸽。

特別需要指出的是叫乌,由于對結(jié)果的標(biāo)注也是一種標(biāo)簽,所以在自然語言處理和機(jī)器學(xué)習(xí)相關(guān)的算法應(yīng)用場景下徽缚,標(biāo)簽對于監(jiān)督式學(xué)習(xí)有重要價(jià)值憨奸,只是單純的指標(biāo)難以做到的。而指標(biāo)在任務(wù)分配凿试、績效管理等領(lǐng)域的作用排宰,也是標(biāo)簽無法做到的。

3. 維度和指標(biāo)區(qū)別與聯(lián)系

維度就是數(shù)據(jù)的觀察角度那婉,即從哪個(gè)角度去分析問題板甘,看待問題。

指標(biāo)就是從維度的基礎(chǔ)上去衡算這個(gè)結(jié)果的值详炬。

維度一般是一個(gè)離散的值盐类,比如時(shí)間維度上每一個(gè)獨(dú)立的日期或地域,因此統(tǒng)計(jì)時(shí),可以把維度相同記錄的聚合在一起在跳,應(yīng)用聚合函數(shù)做累加枪萄、均值、最大值硬毕、最小值等聚合計(jì)算呻引。

指標(biāo)就是被聚合的通計(jì)算礼仗,即聚合運(yùn)算的結(jié)果吐咳,一般是一個(gè)連續(xù)的值。

4. 自然鍵與代理鍵在數(shù)倉的使用區(qū)別

數(shù)倉工具箱中說維度表的唯一主鍵應(yīng)該是代理鍵而不應(yīng)該是自然鍵元践。有時(shí)建模人員不愿意放棄使用自然鍵韭脊,因?yàn)樗麄兿Mc操作型代碼查詢事實(shí)表,而不希望與維度表做連接操作单旁。然而沪羔,應(yīng)該避免使用包含業(yè)務(wù)含義的多維鍵,因?yàn)椴还芪覀冏龀鋈魏渭僭O(shè)最終都可能變得無效象浑,因?yàn)槲覀兛刂撇涣藰I(yè)務(wù)庫的變動(dòng)蔫饰。

所以數(shù)據(jù)倉庫中維度表與事實(shí)表的每個(gè)連接應(yīng)該基于無實(shí)際含義的整數(shù)代理鍵。避免使用自然鍵作為維度表的主鍵愉豺。

5. 數(shù)據(jù)集市和數(shù)據(jù)倉庫的關(guān)系

數(shù)據(jù)集市是企業(yè)級數(shù)據(jù)倉庫的一個(gè)子集篓吁,他主要面向部門級業(yè)務(wù),并且只面向某個(gè)特定的主題蚪拦。為了解決靈活性和性能之間的矛盾杖剪,數(shù)據(jù)集市就是數(shù)據(jù)倉庫體系結(jié)構(gòu)中增加的一種小型的部門或工作組級別的數(shù)據(jù)倉庫。數(shù)據(jù)集市存儲(chǔ)為特定用戶預(yù)先計(jì)算好的數(shù)據(jù)驰贷,從而滿足用戶對性能的需求盛嘿。數(shù)據(jù)集市可以在一定程度上緩解訪問數(shù)據(jù)倉庫的瓶頸。

數(shù)據(jù)集市和數(shù)據(jù)倉庫的主要區(qū)別:數(shù)據(jù)倉庫是企業(yè)級的括袒,能為整個(gè)企業(yè)各個(gè)部門的運(yùn)行提供決策支持手段次兆;而數(shù)據(jù)集市則是一種微型的數(shù)據(jù)倉庫,它通常有更少的數(shù)據(jù),更少的主題區(qū)域,以及更少的歷史數(shù)據(jù),因此是部門級的,一般只能為某個(gè)局部范圍內(nèi)的管理人員服務(wù)锹锰,因此也稱之為部門級數(shù)據(jù)倉庫类垦。

二、離線數(shù)倉建設(shè)核心

數(shù)據(jù)倉庫的核心是展現(xiàn)層和提供優(yōu)質(zhì)的服務(wù)城须。ETL 及其規(guī)范蚤认、分層等所做的一切都是為了一個(gè)更清晰易用的展現(xiàn)層。

1. 數(shù)倉分層

數(shù)倉分層的原則

為便于數(shù)據(jù)分析糕伐,要屏蔽底層復(fù)雜業(yè)務(wù)砰琢,簡單、完整、集成的將數(shù)據(jù)暴露給分析層陪汽。

底層業(yè)務(wù)變動(dòng)與上層需求變動(dòng)對模型沖擊最小化训唱,業(yè)務(wù)系統(tǒng)變化影響削弱在基礎(chǔ)數(shù)據(jù)層,結(jié)合自上而下的建設(shè)方法削弱需求變動(dòng)對模型的影響挚冤。

高內(nèi)聚松耦合况增,即主題之內(nèi)或各個(gè)完整意義的系統(tǒng)內(nèi)數(shù)據(jù)的高內(nèi)聚,主題之間或各個(gè)完整意義的系統(tǒng)間數(shù)據(jù)的松耦合训挡。

構(gòu)建倉庫基礎(chǔ)數(shù)據(jù)層澳骤,使底層業(yè)務(wù)數(shù)據(jù)整合工作與上層應(yīng)用開發(fā)工作相隔離,為倉庫大規(guī)模開發(fā)奠定基礎(chǔ) 倉庫層次更加清晰澜薄,對外暴露數(shù)據(jù)更加統(tǒng)一为肮。

一般采用如下分層結(jié)構(gòu):

1. 數(shù)據(jù)源層:ODS(Operational Data Store)

ODS 層,是最接近數(shù)據(jù)源中數(shù)據(jù)的一層肤京,為了考慮后續(xù)可能需要追溯數(shù)據(jù)問題颊艳,因此對于這一層就不建議做過多的數(shù)據(jù)清洗工作,原封不動(dòng)地接入原始數(shù)據(jù)即可忘分,至于數(shù)據(jù)的去噪棋枕、去重、異常值處理等過程可以放在后面的 DWD 層來做妒峦。

2. 數(shù)據(jù)倉庫層:DW(Data Warehouse)

數(shù)據(jù)倉庫層是我們在做數(shù)據(jù)倉庫時(shí)要核心設(shè)計(jì)的一層重斑,在這里,從 ODS 層中獲得的數(shù)據(jù)按照主題建立各種數(shù)據(jù)模型舟山。

DW 層又細(xì)分為?DWD(Data Warehouse Detail)層绸狐、DWM(Data WareHouse Middle)層和?DWS(Data WareHouse Servce) 層。

1) 數(shù)據(jù)明細(xì)層:DWD(Data Warehouse Detail)

該層一般保持和 ODS 層一樣的數(shù)據(jù)粒度累盗,并且提供一定的數(shù)據(jù)質(zhì)量保證寒矿。DWD 層要做的就是將數(shù)據(jù)清理、整合若债、規(guī)范化符相、臟數(shù)據(jù)、垃圾數(shù)據(jù)蠢琳、規(guī)范不一致的漾月、狀態(tài)定義不一致的占业、命名不規(guī)范的數(shù)據(jù)都會(huì)被處理蒲牧。

同時(shí)惦费,為了提高數(shù)據(jù)明細(xì)層的易用性,該層會(huì)采用一些維度退化手法泰讽,將維度退化至事實(shí)表中例衍,減少事實(shí)表和維表的關(guān)聯(lián)昔期。

另外,在該層也會(huì)做一部分的數(shù)據(jù)聚合佛玄,將相同主題的數(shù)據(jù)匯集到一張表中硼一,提高數(shù)據(jù)的可用性 。

2) 數(shù)據(jù)中間層:DWM(Data WareHouse Middle)

該層會(huì)在 DWD 層的數(shù)據(jù)基礎(chǔ)上梦抢,數(shù)據(jù)做輕度的聚合操作般贼,生成一系列的中間表,提升公共指標(biāo)的復(fù)用性奥吩,減少重復(fù)加工哼蛆。

直觀來講,就是對通用的核心維度進(jìn)行聚合操作圈驼,算出相應(yīng)的統(tǒng)計(jì)指標(biāo)人芽。

在實(shí)際計(jì)算中望几,如果直接從 DWD 或者 ODS 計(jì)算出寬表的統(tǒng)計(jì)指標(biāo)绩脆,會(huì)存在計(jì)算量太大并且維度太少的問題,因此一般的做法是橄抹,在 DWM 層先計(jì)算出多個(gè)小的中間表靴迫,然后再拼接成一張 DWS 的寬表。由于寬和窄的界限不易界定楼誓,也可以去掉 DWM 這一層玉锌,只留 DWS 層,將所有的數(shù)據(jù)再放在 DWS 亦可疟羹。

3) 數(shù)據(jù)服務(wù)層:DWS(Data WareHouse Servce)

DWS 層為公共匯總層主守,會(huì)進(jìn)行輕度匯總,粒度比明細(xì)數(shù)據(jù)稍粗榄融,基于 DWD 層上的基礎(chǔ)數(shù)據(jù)参淫,整合匯總成分析某一個(gè)主題域的服務(wù)數(shù)據(jù),一般是寬表愧杯。DWS 層應(yīng)覆蓋 80% 的應(yīng)用場景涎才。又稱數(shù)據(jù)集市或?qū)挶怼?/p>

按照業(yè)務(wù)劃分,如主題域流量力九、訂單耍铜、用戶等,生成字段比較多的寬表跌前,用于提供后續(xù)的業(yè)務(wù)查詢棕兼,OLAP 分析,數(shù)據(jù)分發(fā)等抵乓。

一般來講伴挚,該層的數(shù)據(jù)表會(huì)相對比較少蹭沛,一張表會(huì)涵蓋比較多的業(yè)務(wù)內(nèi)容,由于其字段較多章鲤,因此一般也會(huì)稱該層的表為寬表摊灭。

3. 數(shù)據(jù)應(yīng)用層:APP(Application)

在這里,主要是提供給數(shù)據(jù)產(chǎn)品和數(shù)據(jù)分析使用的數(shù)據(jù)败徊,一般會(huì)存放在 ES帚呼、 PostgreSql、Redis 等系統(tǒng)中供線上系統(tǒng)使用皱蹦,也可能會(huì)存在 Hive 或者 Druid 中供數(shù)據(jù)分析和數(shù)據(jù)挖掘使用煤杀。比如我們經(jīng)常說的報(bào)表數(shù)據(jù),一般就放在這里沪哺。

4. 維表層:DIM(Dimension)

如果維表過多沈自,也可針對維表設(shè)計(jì)單獨(dú)一層,維表層主要包含兩部分?jǐn)?shù)據(jù):

高基數(shù)維度數(shù)據(jù):一般是用戶資料表辜妓、商品資料表類似的資料表枯途。數(shù)據(jù)量可能是千萬級或者上億級別。

低基數(shù)維度數(shù)據(jù):一般是配置表籍滴,比如枚舉值對應(yīng)的中文含義酪夷,或者日期維表。數(shù)據(jù)量可能是個(gè)位數(shù)或者幾千幾萬孽惰。

2. 數(shù)倉建模方法

數(shù)倉建模在哪層建設(shè)呢晚岭?我們以維度建模為例,建模是在數(shù)據(jù)源層的下一層進(jìn)行建設(shè)勋功,在上節(jié)的分層架構(gòu)中坦报,就是在DW層進(jìn)行數(shù)倉建模,所以DW層是數(shù)倉建設(shè)的核心層狂鞋。

那數(shù)倉建模怎么建呢片择?其實(shí)數(shù)據(jù)倉庫的建模方法有很多種,每一種建模方法代表了哲學(xué)上的一個(gè)觀點(diǎn)要销,代表了一種歸納构回、概括世界的一種方法。常見的有?范式建模法疏咐、維度建模法纤掸、實(shí)體建模法等,每種方法從本質(zhì)上將是從不同的角度看待業(yè)務(wù)中的問題浑塞。

1. 范式建模法(Third Normal Form借跪,3NF)

范式建模法其實(shí)是我們在構(gòu)建數(shù)據(jù)模型常用的一個(gè)方法,該方法的主要由 Inmon 所提倡酌壕,主要解決關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)掏愁,利用的一種技術(shù)層面上的方法歇由。目前,我們在關(guān)系型數(shù)據(jù)庫中的建模方法果港,大部分采用的是三范式建模法沦泌。

范式 是符合某一種級別的關(guān)系模式的集合。構(gòu)造數(shù)據(jù)庫必須遵循一定的規(guī)則辛掠,而在關(guān)系型數(shù)據(jù)庫中這種規(guī)則就是范式谢谦,這一過程也被稱為規(guī)范化。目前關(guān)系數(shù)據(jù)庫有六種范式:第一范式(1NF)萝衩、第二范式(2NF)回挽、第三范式(3NF)、Boyce-Codd范式(BCNF)猩谊、第四范式(4NF)和第五范式(5NF)千劈。

在數(shù)據(jù)倉庫的模型設(shè)計(jì)中,一般采用第三范式牌捷。一個(gè)符合第三范式的關(guān)系必須具有以下三個(gè)條件 :

每個(gè)屬性值唯一墙牌,不具有多義性 ;

每個(gè)非主屬性必須完全依賴于整個(gè)主鍵,而非主鍵的一部分 ;

每個(gè)非主屬性不能依賴于其他關(guān)系中的屬性宜鸯,因?yàn)檫@樣的話憔古,這種屬性應(yīng)該歸到其他關(guān)系中去遮怜。

范式建模

根據(jù) Inmon 的觀點(diǎn)淋袖,數(shù)據(jù)倉庫模型的建設(shè)方法和業(yè)務(wù)系統(tǒng)的企業(yè)數(shù)據(jù)模型類似。在業(yè)務(wù)系統(tǒng)中锯梁,企業(yè)數(shù)據(jù)模型決定了數(shù)據(jù)的來源即碗,而企業(yè)數(shù)據(jù)模型也分為兩個(gè)層次,即主題域模型和邏輯模型陌凳。同樣剥懒,主題域模型可以看成是業(yè)務(wù)模型的概念模型,而邏輯模型則是域模型在關(guān)系型數(shù)據(jù)庫上的實(shí)例化合敦。

2. 維度建模法(Dimensional Modeling)

維度模型是數(shù)據(jù)倉庫領(lǐng)域另一位大師Ralph Kimall所倡導(dǎo)初橘,他的《數(shù)據(jù)倉庫工具箱》是數(shù)據(jù)倉庫工程領(lǐng)域最流行的數(shù)倉建模經(jīng)典。維度建模以分析決策的需求出發(fā)構(gòu)建模型充岛,構(gòu)建的數(shù)據(jù)模型為分析需求服務(wù)保檐,因此它重點(diǎn)解決用戶如何更快速完成分析需求,同時(shí)還有較好的大規(guī)模復(fù)雜查詢的響應(yīng)性能崔梗。

維度建模

典型的代表是我們比較熟知的星形模型(Star-schema)夜只,以及在一些特殊場景下適用的雪花模型(Snow-schema)。

維度建模中比較重要的概念就是 事實(shí)表(Fact table)和維度表(Dimension table)蒜魄。其最簡單的描述就是扔亥,按照事實(shí)表场躯、維度表來構(gòu)建數(shù)據(jù)倉庫、數(shù)據(jù)集市旅挤。

3. 實(shí)體建模法(Entity Modeling)

實(shí)體建模法并不是數(shù)據(jù)倉庫建模中常見的一個(gè)方法踢关,它來源于哲學(xué)的一個(gè)流派。從哲學(xué)的意義上說粘茄,客觀世界應(yīng)該是可以細(xì)分的耘成,客觀世界應(yīng)該可以分成由一個(gè)個(gè)實(shí)體,以及實(shí)體與實(shí)體之間的關(guān)系組成驹闰。那么我們在數(shù)據(jù)倉庫的建模過程中完全可以引入這個(gè)抽象的方法瘪菌,將整個(gè)業(yè)務(wù)也可以劃分成一個(gè)個(gè)的實(shí)體,而每個(gè)實(shí)體之間的關(guān)系嘹朗,以及針對這些關(guān)系的說明就是我們數(shù)據(jù)建模需要做的工作师妙。

雖然實(shí)體法粗看起來好像有一些抽象,其實(shí)理解起來很容易屹培。即我們可以將任何一個(gè)業(yè)務(wù)過程劃分成 3 個(gè)部分默穴,實(shí)體,事件褪秀,說明蓄诽,如下圖所示:

實(shí)體建模

上圖表述的是一個(gè)抽象的含義,如果我們描述一個(gè)簡單的事實(shí):“小明開車去學(xué)校上學(xué)”媒吗。以這個(gè)業(yè)務(wù)事實(shí)為例仑氛,我們可以把“小明”,“學(xué)姓⒂ⅲ”看成是一個(gè)實(shí)體锯岖,“上學(xué)”描述的是一個(gè)業(yè)務(wù)過程,我們在這里可以抽象為一個(gè)具體“事件”甫何,而“開車去”則可以看成是事件“上學(xué)”的一個(gè)說明出吹。

3. 維度建模詳解

目前在互聯(lián)網(wǎng)公司最常用的建模方法就是維度建模,我們將重點(diǎn)講解辙喂!

維度建模是專門應(yīng)用于分析型數(shù)據(jù)庫捶牢、數(shù)據(jù)倉庫、數(shù)據(jù)集市建模的方法巍耗。數(shù)據(jù)集市可以理解為是一種"小型數(shù)據(jù)倉庫"秋麸。

我們先不著急開始維度建模,先來了解下維度建模中表的類型維度建模的模式之后再開始建模芍锦,這樣能夠讓我們深刻理解竹勉!

1. 維度建模中表的類型

維度建模分為兩種表:事實(shí)表和維度表:

事實(shí)表:必然存在的一些數(shù)據(jù),像采集的日志文件娄琉,訂單表次乓,都可以作為事實(shí)表 吓歇。

特征:是一堆主鍵的集合,每個(gè)主鍵對應(yīng)維度表中的一條記錄票腰,客觀存在的城看,根據(jù)主題確定出需要使用的數(shù)據(jù)

維度表:維度就是所分析的數(shù)據(jù)的一個(gè)量,維度表就是以合適的角度來創(chuàng)建的表杏慰,分析問題的一個(gè)角度:時(shí)間测柠、地域、終端缘滥、用戶等角度

1. 事實(shí)表

發(fā)生在現(xiàn)實(shí)世界中的操作型事件轰胁,其所產(chǎn)生的可度量數(shù)值,存儲(chǔ)在事實(shí)表中朝扼。從最低的粒度級別來看赃阀,事實(shí)表行對應(yīng)一個(gè)度量事件,反之亦然擎颖。

事實(shí)表表示對分析主題的度量榛斯。比如一次購買行為我們就可以理解為是一個(gè)事實(shí)。

事實(shí)與維度

圖中的訂單表就是一個(gè)事實(shí)表搂捧,你可以理解他就是在現(xiàn)實(shí)中發(fā)生的一次操作型事件驮俗,我們每完成一個(gè)訂單,就會(huì)在訂單中增加一條記錄允跑。事實(shí)表的特征:表里沒有存放實(shí)際的內(nèi)容王凑,他是一堆主鍵的集合,這些ID分別能對應(yīng)到維度表中的一條記錄吮蛹。事實(shí)表包含了與各維度表相關(guān)聯(lián)的外鍵荤崇,可與維度表關(guān)聯(lián)。事實(shí)表的度量通常是數(shù)值類型潮针,且記錄數(shù)會(huì)不斷增加,表數(shù)據(jù)規(guī)模迅速增長倚喂。

明細(xì)表(寬表):

事實(shí)表的數(shù)據(jù)中每篷,有些屬性共同組成了一個(gè)字段(糅合在一起),比如年月日時(shí)分秒構(gòu)成了時(shí)間,當(dāng)需要根據(jù)某一屬性進(jìn)行分組統(tǒng)計(jì)的時(shí)候端圈,需要截取拼接之類的操作焦读,效率極低。如:

local_time

2021-03-18 06:31:42

為了分析方便舱权,可以事實(shí)表中的一個(gè)字段切割提取多個(gè)屬性出來構(gòu)成新的字段矗晃,因?yàn)樽侄巫兌嗔耍苑Q為寬表宴倍,原來的成為窄表张症。

將上述的local_time字段擴(kuò)展為如下6個(gè)字段:

yearmonthdayhourms

20210318063142

又因?yàn)閷挶淼男畔⒏忧逦骷?xì)仓技,所以也可以稱之為明細(xì)表。

事實(shí)表種類

事實(shí)表分為以下6類:

事務(wù)事實(shí)表

周期快照事實(shí)表

累積快照事實(shí)表

無事實(shí)的事實(shí)表

聚集事實(shí)表

合并事實(shí)表

簡單解釋下每種表的概念:

事務(wù)事實(shí)表

表中的一行對應(yīng)空間或時(shí)間上某點(diǎn)的度量事件俗他。就是一行數(shù)據(jù)中必須有度量字段脖捻,什么是度量,就是指標(biāo)兆衅,比如說銷售金額地沮,銷售數(shù)量等這些可加的或者半可加就是度量值。另一點(diǎn)就是事務(wù)事實(shí)表都包含一個(gè)與維度表關(guān)聯(lián)的外鍵羡亩。并且度量值必須和事務(wù)粒度保持一致摩疑。

周期快照事實(shí)表

顧名思義,周期事實(shí)表就是每行都帶有時(shí)間值字段畏铆,代表周期未荒,通常時(shí)間值都是標(biāo)準(zhǔn)周期,如某一天及志,某周片排,某月等。粒度是周期速侈,而不是個(gè)體的事務(wù)率寡,也就是說一個(gè)周期快照事實(shí)表中數(shù)據(jù)可以是多個(gè)事實(shí),但是它們都屬于某個(gè)周期內(nèi)倚搬。

累計(jì)快照事實(shí)表

周期快照事實(shí)表是單個(gè)周期內(nèi)數(shù)據(jù)冶共,而累計(jì)快照事實(shí)表是由多個(gè)周期數(shù)據(jù)組成,每行匯總了過程開始到結(jié)束之間的度量每界。每行數(shù)據(jù)相當(dāng)于管道或工作流捅僵,有事件的起點(diǎn),過程眨层,終點(diǎn)庙楚,并且每個(gè)關(guān)鍵步驟都包含日期字段。如訂單數(shù)據(jù)趴樱,累計(jì)快照事實(shí)表的一行就是一個(gè)訂單馒闷,當(dāng)訂單產(chǎn)生時(shí)插入一行,當(dāng)訂單發(fā)生變化時(shí)叁征,這行就被修改纳账。

無事實(shí)的事實(shí)表

我們以上討論的事實(shí)表度量都是數(shù)字化的,當(dāng)然實(shí)際應(yīng)用中絕大多數(shù)都是數(shù)字化的度量捺疼,但是也可能會(huì)有少量的沒有數(shù)字化的值但是還很有價(jià)值的字段疏虫,無事實(shí)的事實(shí)表就是為這種數(shù)據(jù)準(zhǔn)備的,利用這種事實(shí)表可以分析發(fā)生了什么。

聚集事實(shí)表

聚集卧秘,就是對原子粒度的數(shù)據(jù)進(jìn)行簡單的聚合操作呢袱,目的就是為了提高查詢性能。如我們需求是查詢?nèi)珖虚T店的總銷售額斯议,我們原子粒度的事實(shí)表中每行是每個(gè)分店每個(gè)商品的銷售額产捞,聚集事實(shí)表就可以先聚合每個(gè)分店的總銷售額,這樣匯總所有門店的銷售額時(shí)計(jì)算的數(shù)據(jù)量就會(huì)小很多哼御。

合并事實(shí)表

這種事實(shí)表遵循一個(gè)原則坯临,就是相同粒度,數(shù)據(jù)可以來自多個(gè)過程恋昼,但是只要它們屬于相同粒度看靠,就可以合并為一個(gè)事實(shí)表,這類事實(shí)表特別適合經(jīng)常需要共同分析的多過程度量液肌。

2.維度表

每個(gè)維度表都包含單一的主鍵列挟炬。維度表的主鍵可以作為與之關(guān)聯(lián)的任何事實(shí)表的外鍵,當(dāng)然嗦哆,維度表行的描述環(huán)境應(yīng)與事實(shí)表行完全對應(yīng)谤祖。維度表通常比較寬,是扁平型非規(guī)范表老速,包含大量的低粒度的文本屬性粥喜。

維度表示你要對數(shù)據(jù)進(jìn)行分析時(shí)所用的一個(gè)量,比如你要分析產(chǎn)品銷售情況橘券, 你可以選擇按類別來進(jìn)行分析额湘,或按區(qū)域來分析。每個(gè)類別就構(gòu)成一個(gè)維度旁舰。上圖中的用戶表锋华、商家表、時(shí)間表這些都屬于維度表箭窜,這些表都有一個(gè)唯一的主鍵毯焕,然后在表中存放了詳細(xì)的數(shù)據(jù)信息。

總的說來绽快,在數(shù)據(jù)倉庫中不需要嚴(yán)格遵守規(guī)范化設(shè)計(jì)原則芥丧。因?yàn)閿?shù)據(jù)倉庫的主導(dǎo)功能就是面向分析,以查詢?yōu)橹鞣话眨簧婕皵?shù)據(jù)更新操作。事實(shí)表的設(shè)計(jì)是以能夠正確記錄歷史信息為準(zhǔn)則擅耽,維度表的設(shè)計(jì)是以能夠以合適的角度來聚合主題內(nèi)容為準(zhǔn)則活孩。

維度表結(jié)構(gòu)

維度表謹(jǐn)記一條原則,包含單一主鍵列乖仇,但有時(shí)因業(yè)務(wù)復(fù)雜憾儒,也可能出現(xiàn)聯(lián)合主鍵询兴,請盡量避免,如果無法避免起趾,也要確保必須是單一的诗舰,這很重要,如果維表主鍵不是單一训裆,和事實(shí)表關(guān)聯(lián)時(shí)會(huì)出現(xiàn)數(shù)據(jù)發(fā)散眶根,導(dǎo)致最后結(jié)果可能出現(xiàn)錯(cuò)誤。

維度表通常比較寬边琉,包含大量的低粒度的文本屬性属百。

跨表鉆取

跨表鉆取意思是當(dāng)每個(gè)查詢的行頭都包含相同的一致性屬性時(shí),使不同的查詢能夠針對兩個(gè)或更多的事實(shí)表進(jìn)行查詢

鉆取可以改變維的層次变姨,變換分析的粒度族扰。它包括上鉆/下鉆:

上鉆(roll-up):上卷是沿著維的層次向上聚集匯總數(shù)據(jù)。例如定欧,對產(chǎn)品銷售數(shù)據(jù)渔呵,沿著時(shí)間維上卷,可以求出所有產(chǎn)品在所有地區(qū)每月(或季度或年或全部)的銷售額砍鸠。

下鉆(drill-down):下鉆是上鉆的逆操作扩氢,它是沿著維的層次向下,查看更詳細(xì)的數(shù)據(jù)睦番。

退化維度

退化維度就是將維度退回到事實(shí)表中类茂。因?yàn)橛袝r(shí)維度除了主鍵沒有其他內(nèi)容,雖然也是合法維度鍵托嚣,但是一般都會(huì)退回到事實(shí)表中巩检,減少關(guān)聯(lián)次數(shù),提高查詢性能

多層次維度

多數(shù)維度包含不止一個(gè)自然層次示启,如日期維度可以從天的層次到周到月到年的層次兢哭。所以在有些情況下,在同一維度中存在不同的層次夫嗓。

維度表空值屬性

當(dāng)給定維度行沒有被全部填充時(shí)迟螺,或者當(dāng)存在屬性沒有被應(yīng)用到所有維度行時(shí),將產(chǎn)生空值維度屬性舍咖。上述兩種情況矩父,推薦采用描述性字符串代替空值,如使用 unknown 或 not applicable 替換空值排霉。

日歷日期維度

在日期維度表中窍株,主鍵的設(shè)置不要使用順序生成的id來表示,可以使用更有意義的數(shù)據(jù)表示,比如將年月日合并起來表示球订,即YYYYMMDD后裸,或者更加詳細(xì)的精度。

2. 維度建模三種模式

1. 星型模式

星形模式(Star Schema)是最常用的維度建模方式冒滩。星型模式是以事實(shí)表為中心微驶,所有的維度表直接連接在事實(shí)表上,像星星一樣开睡。星形模式的維度建模由一個(gè)事實(shí)表和一組維表成因苹,且具有以下特點(diǎn):a. 維表只和事實(shí)表關(guān)聯(lián)撮弧,維表之間沒有關(guān)聯(lián)珍昨;b. 每個(gè)維表主鍵為單列旨别,且該主鍵放置在事實(shí)表中舰褪,作為兩邊連接的外鍵玄捕;c. 以事實(shí)表為核心宪祥,維表圍繞核心呈星形分布裹芝;

2. 雪花模式

雪花模式(Snowflake Schema)是對星形模式的擴(kuò)展刻坊。雪花模式的維度表可以擁有其他維度表的蝗茁,雖然這種模型相比星型更規(guī)范一些醋虏,但是由于這種模型不太容易理解,維護(hù)成本比較高哮翘,而且性能方面需要關(guān)聯(lián)多層維表颈嚼,性能也比星型模型要低。所以一般不是很常用

雪花模式

3.星座模式

星座模式是星型模式延伸而來饭寺,星型模式是基于一張事實(shí)表的阻课,而星座模式是基于多張事實(shí)表的,而且共享維度信息艰匙。前面介紹的兩種維度建模方法都是多維表對應(yīng)單事實(shí)表限煞,但在很多時(shí)候維度空間內(nèi)的事實(shí)表不止一個(gè),而一個(gè)維表也可能被多個(gè)事實(shí)表用到员凝。在業(yè)務(wù)發(fā)展后期署驻,絕大部分維度建模都采用的是星座模式。

星座模型

3. 維度建模過程

我們知道維度建模的表類型有事實(shí)表健霹,維度表旺上;模式有星形模型,雪花模型糖埋,星座模型這些概念了宣吱,但是實(shí)際業(yè)務(wù)中,給了我們一堆數(shù)據(jù)瞳别,我們怎么拿這些數(shù)據(jù)進(jìn)行數(shù)倉建設(shè)呢凌节,數(shù)倉工具箱作者根據(jù)自身60多年的實(shí)際業(yè)務(wù)經(jīng)驗(yàn)钦听,給我們總結(jié)了如下四步洒试,請務(wù)必記妆渡荨!

數(shù)倉工具箱中的維度建模四步走

維度建模四步走

牢記以上四步垒棋,不管什么業(yè)務(wù)卒煞,就按照這個(gè)步驟來,順序不要搞亂叼架,因?yàn)檫@四步是環(huán)環(huán)相扣畔裕,步步相連。下面詳細(xì)拆解下每個(gè)步驟怎么做

1乖订、選擇業(yè)務(wù)過程

維度建模是緊貼業(yè)務(wù)的扮饶,所以必須以業(yè)務(wù)為根基進(jìn)行建模,那么選擇業(yè)務(wù)過程乍构,顧名思義就是在整個(gè)業(yè)務(wù)流程中選取我們需要建模的業(yè)務(wù)甜无,根據(jù)運(yùn)營提供的需求及日后的易擴(kuò)展性等進(jìn)行選擇業(yè)務(wù)。比如商城哥遮,整個(gè)商城流程分為商家端岂丘,用戶端,平臺(tái)端眠饮,運(yùn)營需求是總訂單量奥帘,訂單人數(shù),及用戶的購買情況等仪召,我們選擇業(yè)務(wù)過程就選擇用戶端的數(shù)據(jù)寨蹋,商家及平臺(tái)端暫不考慮。業(yè)務(wù)選擇非常重要扔茅,因?yàn)楹竺嫠械牟襟E都是基于此業(yè)務(wù)數(shù)據(jù)展開的已旧。

2、聲明粒度

先舉個(gè)例子:對于用戶來說咖摹,一個(gè)用戶有一個(gè)身份證號(hào)评姨,一個(gè)戶籍地址,多個(gè)手機(jī)號(hào)萤晴,多張銀行卡吐句,那么與用戶粒度相同的粒度屬性有身份證粒度,戶籍地址粒度店读,比用戶粒度更細(xì)的粒度有手機(jī)號(hào)粒度嗦枢,銀行卡粒度,存在一對一的關(guān)系就是相同粒度屯断。為什么要提相同粒度呢文虏,因?yàn)榫S度建模中要求我們侣诺,在同一事實(shí)表中,必須具有相同的粒度氧秘,同一事實(shí)表中不要混用多種不同的粒度年鸳,不同的粒度數(shù)據(jù)建立不同的事實(shí)表。并且從給定的業(yè)務(wù)過程獲取數(shù)據(jù)時(shí)丸相,強(qiáng)烈建議從關(guān)注原子粒度開始設(shè)計(jì)搔确,也就是從最細(xì)粒度開始,因?yàn)樵恿6饶軌虺惺軣o法預(yù)期的用戶查詢灭忠。但是上卷匯總粒度對查詢性能的提升很重要的膳算,所以對于有明確需求的數(shù)據(jù),我們建立針對需求的上卷匯總粒度弛作,對需求不明朗的數(shù)據(jù)我們建立原子粒度涕蜂。

3、確認(rèn)維度

維度表是作為業(yè)務(wù)分析的入口和描述性標(biāo)識(shí)映琳,所以也被稱為數(shù)據(jù)倉庫的“靈魂”机隙。在一堆的數(shù)據(jù)中怎么確認(rèn)哪些是維度屬性呢,如果該列是對具體值的描述刊头,是一個(gè)文本或常量黍瞧,某一約束和行標(biāo)識(shí)的參與者,此時(shí)該屬性往往是維度屬性原杂,數(shù)倉工具箱中告訴我們牢牢掌握事實(shí)表的粒度印颤,就能將所有可能存在的維度區(qū)分開,并且要確保維度表中不能出現(xiàn)重復(fù)數(shù)據(jù)穿肄,應(yīng)使維度主鍵唯一

4年局、確認(rèn)事實(shí)

事實(shí)表是用來度量的,基本上都以數(shù)量值表示咸产,事實(shí)表中的每行對應(yīng)一個(gè)度量矢否,每行中的數(shù)據(jù)是一個(gè)特定級別的細(xì)節(jié)數(shù)據(jù),稱為粒度脑溢。維度建模的核心原則之一是同一事實(shí)表中的所有度量必須具有相同的粒度僵朗。這樣能確保不會(huì)出現(xiàn)重復(fù)計(jì)算度量的問題。有時(shí)候往往不能確定該列數(shù)據(jù)是事實(shí)屬性還是維度屬性屑彻。記住最實(shí)用的事實(shí)就是數(shù)值類型和可加類事實(shí)验庙。所以可以通過分析該列是否是一種包含多個(gè)值并作為計(jì)算的參與者的度量,這種情況下該列往往是事實(shí)社牲。

三粪薛、離線數(shù)倉建設(shè)實(shí)戰(zhàn)

技術(shù)是為業(yè)務(wù)服務(wù)的,業(yè)務(wù)是為公司創(chuàng)造價(jià)值的搏恤,離開業(yè)務(wù)的技術(shù)是無意義的

1. 業(yè)務(wù)介紹

需要針對不同需求的用戶開發(fā)不同的產(chǎn)品违寿,所以公司內(nèi)部有很多條業(yè)務(wù)線湃交,但是對于數(shù)據(jù)部門來說,所有業(yè)務(wù)線的數(shù)據(jù)都是數(shù)據(jù)源藤巢。對數(shù)據(jù)的劃分不只是根據(jù)業(yè)務(wù)進(jìn)行搞莺,而是結(jié)合數(shù)據(jù)的屬性。

2. 早期規(guī)劃

之前開發(fā)是不同業(yè)務(wù)線對應(yīng)不同的數(shù)據(jù)團(tuán)隊(duì)菌瘪,每個(gè)數(shù)據(jù)團(tuán)隊(duì)互不干擾腮敌,這種模式比較簡單,只針對自己的業(yè)務(wù)線進(jìn)行數(shù)倉建設(shè)及報(bào)表開發(fā)即可俏扩。

但是隨著業(yè)務(wù)的發(fā)展,頻繁迭代及跨部門的垂直業(yè)務(wù)單元越來越多弊添,業(yè)務(wù)之間的出現(xiàn)耦合情況录淡,這時(shí)再采用這種煙囪式開發(fā)就出現(xiàn)了問題:

例如權(quán)限問題,公司對數(shù)據(jù)管理比較嚴(yán)格油坝,不同的數(shù)據(jù)開發(fā)組沒有權(quán)限共享數(shù)據(jù)嫉戚,需要其他業(yè)務(wù)線的數(shù)據(jù)權(quán)限需要上報(bào)審批,比較耽誤時(shí)間澈圈;

還有重復(fù)開發(fā)問題彬檀,不同業(yè)務(wù)線會(huì)出現(xiàn)相同的報(bào)表需求,如果每個(gè)業(yè)務(wù)方都開發(fā)各自的報(bào)表瞬女,太浪費(fèi)資源窍帝。

所以對于數(shù)據(jù)開發(fā)而言,需要對各個(gè)業(yè)務(wù)線的數(shù)據(jù)進(jìn)行統(tǒng)一管理诽偷,所以就有了數(shù)據(jù)中臺(tái)的出現(xiàn)坤学。

3. 數(shù)據(jù)中臺(tái)

我認(rèn)為數(shù)據(jù)中臺(tái)是根據(jù)每個(gè)公司具體的業(yè)務(wù)需求而搭建的,不同的業(yè)務(wù)报慕,對中臺(tái)的理解有所不同深浮。

公司內(nèi)部開發(fā)的敏捷數(shù)據(jù)中臺(tái),主要從數(shù)據(jù)技術(shù)和計(jì)算能力的復(fù)用眠冈,到數(shù)據(jù)資產(chǎn)和數(shù)據(jù)服務(wù)的復(fù)用飞苇,數(shù)據(jù)中臺(tái)以更大價(jià)值帶寬,快準(zhǔn)精讓數(shù)據(jù)直接賦能業(yè)務(wù)蜗顽。提供一個(gè)統(tǒng)一化的管理布卡,打破數(shù)據(jù)孤島,追溯數(shù)據(jù)血緣诫舅,實(shí)現(xiàn)自助化及高復(fù)用度羽利。

如下所示:

數(shù)據(jù)中臺(tái)

以上解釋比較抽象,我們以實(shí)際項(xiàng)目開發(fā)來看下數(shù)據(jù)中臺(tái)的便利性刊懈。

比如我們之前做報(bào)表開發(fā)流程这弧,首先是要數(shù)據(jù)采集娃闲,不同的數(shù)據(jù)源通過sqoop等工具采集到大數(shù)據(jù)平臺(tái),然后進(jìn)行數(shù)倉搭建匾浪,最后產(chǎn)出報(bào)表數(shù)據(jù)皇帮,放到可視化系統(tǒng)展示,最終把整個(gè)流程寫成腳本放到調(diào)度平臺(tái)進(jìn)行自動(dòng)化執(zhí)行蛋辈。

而有了數(shù)據(jù)中臺(tái)之后就不需要那么繁瑣属拾,直接進(jìn)行數(shù)倉搭建,產(chǎn)生報(bào)表即可冷溶,無需將精力過多放在數(shù)據(jù)源渐白、可視化展示及調(diào)度。并且可以直觀的查看數(shù)據(jù)血緣關(guān)系逞频,計(jì)算表之間血緣纯衍。像下面圖中,表之間的依賴關(guān)系很明確:

數(shù)據(jù)中臺(tái)

另一點(diǎn)苗胀,數(shù)據(jù)中臺(tái)的異構(gòu)數(shù)據(jù)系統(tǒng)可以非常簡單的進(jìn)行關(guān)聯(lián)查詢襟诸,比如hive的表關(guān)聯(lián)mysql的表』可透明屏蔽異構(gòu)數(shù)據(jù)系統(tǒng)異構(gòu)交互方式歌亲,輕松實(shí)現(xiàn)跨異構(gòu)數(shù)據(jù)系統(tǒng)透明混算。

異構(gòu)數(shù)據(jù)系統(tǒng)原理是數(shù)據(jù)中臺(tái)提供虛擬表到物理表之間的映射,終端用戶無需關(guān)心數(shù)據(jù)的物理存放位置和底層數(shù)據(jù)源的特性澜驮,可直接操作數(shù)據(jù)陷揪,體驗(yàn)類似操作一個(gè)虛擬數(shù)據(jù)庫

數(shù)據(jù)中臺(tái)額外集成可視化展示泉唁,提供一站式數(shù)據(jù)可視化解決方案鹅龄,支持JDBC數(shù)據(jù)源和CSV文件上傳,支持基于數(shù)據(jù)模型拖拽智能生成可視化組件亭畜,大屏展示自適應(yīng)不同大小屏幕扮休。

調(diào)度系統(tǒng)是公司內(nèi)部自寫集成到數(shù)據(jù)中臺(tái)的,在編寫完sql語句之后可以直接進(jìn)行調(diào)度拴鸵。

4. 數(shù)倉建設(shè)

到這才真正到數(shù)倉建設(shè)玷坠,為什么前面我要占那么大篇幅去介紹公司業(yè)務(wù)及所使用的數(shù)據(jù)中臺(tái)系統(tǒng),因?yàn)橄旅娴臄?shù)倉建設(shè)是根據(jù)公司的業(yè)務(wù)發(fā)展及現(xiàn)有的數(shù)據(jù)中臺(tái)進(jìn)行劲藐,數(shù)倉的建設(shè)離不開公司的業(yè)務(wù)八堡。

智能數(shù)倉規(guī)劃

數(shù)倉建設(shè)核心思想:從設(shè)計(jì)、開發(fā)聘芜、部署和使用層面兄渺,避免重復(fù)建設(shè)和指標(biāo)冗余建設(shè),從而保障數(shù)據(jù)口徑的規(guī)范和統(tǒng)一汰现,最終實(shí)現(xiàn)數(shù)據(jù)資產(chǎn)全鏈路關(guān)聯(lián)挂谍、提供標(biāo)準(zhǔn)數(shù)據(jù)輸出以及建立統(tǒng)一的數(shù)據(jù)公共層叔壤。有了核心思想,那怎么開始數(shù)倉建設(shè)口叙,有句話說數(shù)倉建設(shè)者即是技術(shù)專家炼绘,也是大半個(gè)業(yè)務(wù)專家,所以采用的方式就是需求推動(dòng)數(shù)據(jù)建設(shè)妄田,并且因?yàn)閿?shù)據(jù)中臺(tái)俺亮,所以各業(yè)務(wù)知識(shí)體系比較集中,各業(yè)務(wù)數(shù)據(jù)不再分散疟呐,加快了數(shù)倉建設(shè)速度脚曾。

數(shù)倉建設(shè)主要從兩個(gè)方面進(jìn)行,模型和規(guī)范萨醒,所有業(yè)務(wù)進(jìn)行統(tǒng)一化

模型

所有業(yè)務(wù)采用統(tǒng)一的模型體系斟珊,從而降低研發(fā)成本,增強(qiáng)指標(biāo)復(fù)用富纸,并且能保證數(shù)據(jù)口徑的統(tǒng)一

模型分層

結(jié)合公司業(yè)務(wù),后期新增需求較多旨椒,所以分層不宜過多晓褪,并且需要清晰明確各層職責(zé),要保證數(shù)據(jù)層的穩(wěn)定又要屏蔽對下游影響综慎,所以采用如下分層結(jié)構(gòu):

數(shù)據(jù)分層架構(gòu)

數(shù)據(jù)流向

遵循模型開發(fā)時(shí)分層結(jié)構(gòu)涣仿,數(shù)據(jù)從 ods -> dw -> dm ->app 這樣正向流動(dòng),可以防止因數(shù)據(jù)引用不規(guī)范而造成數(shù)據(jù)鏈路混亂及SLA時(shí)效難保障等問題示惊,同時(shí)保證血緣關(guān)系簡潔化好港,能夠輕易追蹤數(shù)據(jù)流向。在開發(fā)時(shí)應(yīng)避免以下情況出現(xiàn):

數(shù)據(jù)引用鏈路不正確米罚,如 ods -> dm ->app 钧汹,出現(xiàn)這種情況說明明細(xì)層沒有完全覆蓋數(shù)據(jù);如 ods -> dw -> app 录择,說明輕度匯總層主題劃分未覆蓋全 拔莱。減少跨層引用,才能提高中間表的復(fù)用度隘竭。理想的數(shù)倉模型設(shè)計(jì)應(yīng)當(dāng)具備:數(shù)據(jù)模型可復(fù)?塘秦,完善且規(guī)范

盡量避免一層的表生成當(dāng)前層的表动看,如dw層表生成dw層表尊剔,這樣會(huì)影響ETL效率。

禁止出現(xiàn)反向依賴菱皆,如dw表依賴于dm表须误。

規(guī)范

表命名規(guī)范

對于ods挨稿、dm、app層表名:類型_主題_表含義霹期,如:dm_xxsh_user

對于dw層表名:類型_主題_維度_表含義叶组,如:dw_xxsh_fact_users(事實(shí)表)、dw_xxsh_dim_city(維度表)

字段命名規(guī)范

構(gòu)建詞根历造,詞根是維度和指標(biāo)管理的基礎(chǔ)甩十,劃分為普通詞根與專有詞根

普通詞根:描述事物的最小單元體,如:sex-性別吭产。

專有詞根:具備行業(yè)專屬或公司內(nèi)部規(guī)定的描述體侣监,如:xxsh-公司內(nèi)部對某個(gè)產(chǎn)品的稱呼。

腳本命名規(guī)范

腳本名稱:腳本類型.腳本功用.[庫名].腳本名稱臣淤,如 hive.hive.dm.dm_xxsh_users

腳本類型主要分為以下三類:

常規(guī)Hive sql:hive

自定義shell腳本:sh

自定義Python腳本:python

腳本內(nèi)容規(guī)范

#變量的定義要符合python的語法要求

#指定任務(wù)負(fù)責(zé)人

owner?="zhangsan@xxx.com"

#腳本存放目錄/opt/xxx

#腳本名稱?hive.hive.dm.dm_xxsh_users

#source用來標(biāo)識(shí)上游依賴表橄霉,一個(gè)任務(wù)如果有多個(gè)上游表,都需要寫進(jìn)去

#(xxx_name?是需要改動(dòng)的邑蒋,其余不需要改)

source=?{

"table_name":?{

"db":"db_name",

"table":"table_name"

}

}

#如source姓蜂,但是每個(gè)任務(wù)target只有一張表

target?=?{

"db_table":?{

"host":"hive",

"db":"db_name",

"table":"table_name"

}

}

#變量列表

#$now

#$now.date 常用,格式示例:2020-12-11

task?='''

寫sql代碼

'

''

5. 數(shù)據(jù)層具體實(shí)現(xiàn)

使用四張圖說明每層的具體實(shí)現(xiàn)

數(shù)據(jù)源層ODS

數(shù)據(jù)源層

數(shù)據(jù)源層主要將各個(gè)業(yè)務(wù)數(shù)據(jù)導(dǎo)入到大數(shù)據(jù)平臺(tái)医吊,作為業(yè)務(wù)數(shù)據(jù)的快照存儲(chǔ)钱慢。

數(shù)據(jù)明細(xì)層DW

數(shù)據(jù)明細(xì)層

事實(shí)表中的每行對應(yīng)一個(gè)度量,每行中的數(shù)據(jù)是一個(gè)特定級別的細(xì)節(jié)數(shù)據(jù)卿堂,稱為粒度束莫。維度建模的核心原則之一是同一事實(shí)表中的所有度量必須具有相同的粒度。這樣能確保不會(huì)出現(xiàn)重復(fù)計(jì)算度量的問題草描。

維度表一般都是單一主鍵览绿,少數(shù)是聯(lián)合主鍵,注意維度表不要出現(xiàn)重復(fù)數(shù)據(jù)穗慕,否則和事實(shí)表關(guān)聯(lián)會(huì)出現(xiàn)數(shù)據(jù)發(fā)散問題饿敲。

有時(shí)候往往不能確定該列數(shù)據(jù)是事實(shí)屬性還是維度屬性。記住最實(shí)用的事實(shí)就是數(shù)值類型和可加類事實(shí)揍诽。所以可以通過分析該列是否是一種包含多個(gè)值并作為計(jì)算的參與者的度量诀蓉,這種情況下該列往往是事實(shí);如果該列是對具體值的描述暑脆,是一個(gè)文本或常量渠啤,某一約束和行標(biāo)識(shí)的參與者,此時(shí)該屬性往往是維度屬性添吗。但是還是要結(jié)合業(yè)務(wù)進(jìn)行最終判斷是維度還是事實(shí)沥曹。

數(shù)據(jù)輕度匯總層DM

數(shù)據(jù)輕度匯總層

此層命名為輕匯總層,就代表這一層已經(jīng)開始對數(shù)據(jù)進(jìn)行匯總,但是不是完全匯總妓美,只是對相同粒度的數(shù)據(jù)進(jìn)行關(guān)聯(lián)匯總僵腺,不同粒度但是有關(guān)系的數(shù)據(jù)也可進(jìn)行匯總,此時(shí)需要將粒度通過聚合等操作進(jìn)行統(tǒng)一壶栋。

數(shù)據(jù)應(yīng)用層APP

數(shù)據(jù)應(yīng)用層

數(shù)據(jù)應(yīng)用層的表就是提供給用戶使用的辰如,數(shù)倉建設(shè)到此就接近尾聲了,接下來就根據(jù)不同的需求進(jìn)行不同的取數(shù)贵试,如直接進(jìn)行報(bào)表展示琉兜,或提供給數(shù)據(jù)分析的同事所需的數(shù)據(jù),或其他的業(yè)務(wù)支撐毙玻。

6. 總結(jié)

一張圖總結(jié)下數(shù)據(jù)倉庫的構(gòu)建整體流程

數(shù)據(jù)中臺(tái)

7. 實(shí)際生產(chǎn)中注意事項(xiàng)

生產(chǎn)環(huán)境中操作不能像我們自己測試時(shí)那樣隨意豌蟋,一不小心都可能造成生產(chǎn)事故。所以每步操作都要十分小心桑滩,需全神貫注梧疲,管好大腦管住右手。

僅列出以下但不限于以下的注意事項(xiàng):

請勿操作自己管理及授權(quán)表之外的其它庫表运准;

未經(jīng)授權(quán)幌氮,請勿操作生產(chǎn)環(huán)境中其他人的腳本及文件;

在修改生產(chǎn)環(huán)境腳本前胁澳,請務(wù)必自行備份到本地浩销;

請確認(rèn)自己的修改操作能迅速回滾;

生產(chǎn)環(huán)境中表名及字段等所有命名請遵循命名規(guī)則听哭。

四、實(shí)時(shí)計(jì)算

實(shí)時(shí)計(jì)算一般都是針對海量數(shù)據(jù)進(jìn)行的塘雳,并且要求為秒級陆盘。由于大數(shù)據(jù)興起之初,Hadoop并沒有給出實(shí)時(shí)計(jì)算解決方案败明,隨后Storm隘马,SparkStreaming,F(xiàn)link等實(shí)時(shí)計(jì)算框架應(yīng)運(yùn)而生妻顶,而Kafka酸员,ES的興起使得實(shí)時(shí)計(jì)算領(lǐng)域的技術(shù)越來越完善,而隨著物聯(lián)網(wǎng)讳嘱,機(jī)器學(xué)習(xí)等技術(shù)的推廣幔嗦,實(shí)時(shí)流式計(jì)算將在這些領(lǐng)域得到充分的應(yīng)用。

實(shí)時(shí)計(jì)算的三個(gè)特征:

無限數(shù)據(jù):無限數(shù)據(jù)指的是一種不斷增長的沥潭,基本上無限的數(shù)據(jù)集邀泉。這些通常被稱為“流數(shù)據(jù)”,而與之相對的是有限的數(shù)據(jù)集。

無界數(shù)據(jù)處理:一種持續(xù)的數(shù)據(jù)處理模式,能夠通過處理引擎重復(fù)的去處理上面的無限數(shù)據(jù)汇恤,是能夠突破有限數(shù)據(jù)處理引擎的瓶頸的庞钢。

低延遲:延遲是多少并沒有明確的定義。但我們都知道數(shù)據(jù)的價(jià)值將隨著時(shí)間的流逝降低因谎,時(shí)效性將是需要持續(xù)解決的問題基括。

現(xiàn)在大數(shù)據(jù)應(yīng)用比較火爆的領(lǐng)域,比如推薦系統(tǒng)在實(shí)踐之初受技術(shù)所限财岔,可能要一分鐘风皿,一小時(shí),甚至更久對用戶進(jìn)行推薦使鹅,這遠(yuǎn)遠(yuǎn)不能滿足需要揪阶,我們需要更快的完成對數(shù)據(jù)的處理,而不是進(jìn)行離線的批處理患朱。

1. 實(shí)時(shí)計(jì)算應(yīng)用場景

隨著實(shí)時(shí)技術(shù)發(fā)展趨于成熟鲁僚,實(shí)時(shí)計(jì)算應(yīng)用越來越廣泛,以下僅列舉常見的幾種實(shí)時(shí)計(jì)算的應(yīng)用場景:

1. 實(shí)時(shí)智能推薦

智能推薦會(huì)根據(jù)用戶歷史的購買或?yàn)g覽行為裁厅,通過推薦算法訓(xùn)練模型冰沙,預(yù)測用戶未來可能會(huì)購買的物品或喜愛的資訊。對個(gè)人來說执虹,推薦系統(tǒng)起著信息過濾的作用拓挥,對Web/App服務(wù)端來說,推薦系統(tǒng)起著滿足用戶個(gè)性化需求袋励,提升用戶滿意度的作用侥啤。推薦系統(tǒng)本身也在飛速發(fā)展,除了算法越來越完善茬故,對時(shí)延的要求也越來越苛刻和實(shí)時(shí)化盖灸。利用Flink流計(jì)算幫助用戶構(gòu)建更加實(shí)時(shí)的智能推薦系統(tǒng),對用戶行為指標(biāo)進(jìn)行實(shí)時(shí)計(jì)算磺芭,對模型進(jìn)行實(shí)時(shí)更新赁炎,對用戶指標(biāo)進(jìn)行實(shí)時(shí)預(yù)測,并將預(yù)測的信息推送給Web/App端钾腺,幫助用戶獲取想要的商品信息徙垫,另一方面也幫助企業(yè)提升銷售額,創(chuàng)造更大的商業(yè)價(jià)值放棒。

2. 實(shí)時(shí)欺詐檢測

在金融領(lǐng)域的業(yè)務(wù)中姻报,常常出現(xiàn)各種類型的欺詐行為,例如信用卡欺詐哨查,信貸申請欺詐等逗抑,而如何保證用戶和公司的資金安全,是近年來許多金融公司及銀行共同面對的挑戰(zhàn)。隨著不法分子欺詐手段的不斷升級邮府,傳統(tǒng)的反欺詐手段已經(jīng)不足以解決目前所面臨的問題荧关。以往可能需要幾個(gè)小時(shí)才能通過交易數(shù)據(jù)計(jì)算出用戶的行為指標(biāo),然后通過規(guī)則判別出具有欺詐行為嫌疑的用戶褂傀,再進(jìn)行案件調(diào)查處理忍啤,在這種情況下資金可能早已被不法分子轉(zhuǎn)移,從而給企業(yè)和用戶造成大量的經(jīng)濟(jì)損失仙辟。而運(yùn)用Flink流式計(jì)算技術(shù)能夠在毫秒內(nèi)就完成對欺詐行為判斷指標(biāo)的計(jì)算同波,然后實(shí)時(shí)對交易流水進(jìn)行實(shí)時(shí)攔截,避免因?yàn)樘幚聿患皶r(shí)而導(dǎo)致的經(jīng)濟(jì)損失叠国。

3. 輿情分析

有的客戶需要做輿情分析未檩,要求所有數(shù)據(jù)存放若干年,輿情數(shù)據(jù)每日數(shù)據(jù)量可能超百萬粟焊,年數(shù)據(jù)量可達(dá)到幾十億的數(shù)據(jù)蜜自。而且爬蟲爬過來的數(shù)據(jù)是輿情热凹,通過大數(shù)據(jù)技術(shù)進(jìn)行分詞之后得到的可能是大段的網(wǎng)友評論乡括,客戶往往要求對輿情進(jìn)行查詢蚀浆,做全文本搜索,并要求響應(yīng)時(shí)間控制在秒級香追。爬蟲將數(shù)據(jù)爬到大數(shù)據(jù)平臺(tái)的Kafka里合瓢,在里面做Flink流處理,去重去噪做語音分析透典,寫到ElasticSearch里晴楔。大數(shù)據(jù)的一個(gè)特點(diǎn)是多數(shù)據(jù)源,大數(shù)據(jù)平臺(tái)能根據(jù)不同的場景選擇不同的數(shù)據(jù)源峭咒。

4. 復(fù)雜事件處理

對于復(fù)雜事件處理滥崩,比較常見的集中于工業(yè)領(lǐng)域,例如對車載傳感器讹语,機(jī)械設(shè)備等實(shí)時(shí)故障檢測,這些業(yè)務(wù)類型通常數(shù)據(jù)量都非常大蜂科,且對數(shù)據(jù)處理的時(shí)效性要求非常高顽决。通過利用Flink提供的CEP進(jìn)行時(shí)間模式的抽取,同時(shí)應(yīng)用Flink的Sql進(jìn)行事件數(shù)據(jù)的轉(zhuǎn)換导匣,在流式系統(tǒng)中構(gòu)建實(shí)施規(guī)則引擎才菠,一旦事件觸發(fā)報(bào)警規(guī)則,便立即將告警結(jié)果通知至下游通知系統(tǒng)贡定,從而實(shí)現(xiàn)對設(shè)備故障快速預(yù)警檢測赋访,車輛狀態(tài)監(jiān)控等目的。

5. 實(shí)時(shí)機(jī)器學(xué)習(xí)

實(shí)時(shí)機(jī)器學(xué)習(xí)是一個(gè)更寬泛的概念,傳統(tǒng)靜態(tài)的機(jī)器學(xué)習(xí)主要側(cè)重于靜態(tài)的模型和歷史數(shù)據(jù)進(jìn)行訓(xùn)練并提供預(yù)測蚓耽。很多時(shí)候用戶的短期行為渠牲,對模型有修正作用,或者說是對業(yè)務(wù)判斷有預(yù)測作用步悠。對系統(tǒng)來說签杈,需要采集用戶最近的行為并進(jìn)行特征工程,然后給到實(shí)時(shí)機(jī)器學(xué)習(xí)系統(tǒng)進(jìn)行機(jī)器學(xué)習(xí)鼎兽。如果動(dòng)態(tài)地實(shí)施新規(guī)則答姥,或是推出新廣告,就會(huì)有很大的參考價(jià)值谚咬。

2. 實(shí)時(shí)計(jì)算總覽

我們先來看一張大數(shù)據(jù)平臺(tái)的實(shí)時(shí)架構(gòu)圖:

數(shù)據(jù)同步:

在上面這張架構(gòu)圖中鹦付,數(shù)據(jù)從Web平臺(tái)中產(chǎn)生,通過數(shù)據(jù)同步系統(tǒng)導(dǎo)入到大數(shù)據(jù)平臺(tái)择卦,由于數(shù)據(jù)源不同敲长,這里的數(shù)據(jù)同步系統(tǒng)實(shí)際上是多個(gè)相關(guān)系統(tǒng)的組合。數(shù)據(jù)庫同步通常用 Sqoop互捌,日志同步可以選擇 Flume等潘明,不同的數(shù)據(jù)源產(chǎn)生的數(shù)據(jù)質(zhì)量可能差別很大,數(shù)據(jù)庫中的格式化數(shù)據(jù)直接導(dǎo)入大數(shù)據(jù)系統(tǒng)即可秕噪,而日志和爬蟲產(chǎn)生的數(shù)據(jù)就需要進(jìn)行大量的清洗钳降、轉(zhuǎn)化處理才能有效使用。

數(shù)據(jù)存儲(chǔ):

該層對原始數(shù)據(jù)腌巾、清洗關(guān)聯(lián)后的明細(xì)數(shù)據(jù)進(jìn)行存儲(chǔ)遂填,基于統(tǒng)一的實(shí)時(shí)數(shù)據(jù)模型分層理念,將不同應(yīng)用場景的數(shù)據(jù)分別存儲(chǔ)在 Kafka澈蝙、HDFS吓坚、Kudu、 Clickhouse灯荧、Hbase等存儲(chǔ)中礁击。

數(shù)據(jù)計(jì)算:

計(jì)算層主要使用 Flink、Spark逗载、Presto 以及 ClickHouse 自帶的計(jì)算能力等四種計(jì)算引擎哆窿,F(xiàn)link 計(jì)算引擎主要用于實(shí)時(shí)數(shù)據(jù)同步、 流式 ETL厉斟、關(guān)鍵系統(tǒng)秒級實(shí)時(shí)指標(biāo)計(jì)算場景挚躯,Spark SQL 主要用于復(fù)雜多維分析的準(zhǔn)實(shí)時(shí)指標(biāo)計(jì)算需求場景,Presto 和 ClickHouse 主要滿足多維自助分析擦秽、對查詢響應(yīng)時(shí)間要求不太高的場景码荔。

實(shí)時(shí)應(yīng)用:

以統(tǒng)一查詢服務(wù)對各個(gè)業(yè)務(wù)線數(shù)據(jù)場景進(jìn)行支持漩勤,業(yè)務(wù)主要包括實(shí)時(shí)大屏、實(shí)時(shí)數(shù)據(jù)產(chǎn)品缩搅、實(shí)時(shí) OLAP越败、實(shí)時(shí)特征等。

當(dāng)然一個(gè)好的大數(shù)據(jù)平臺(tái)不能缺少元數(shù)據(jù)管理及數(shù)據(jù)治理:

1. 元數(shù)據(jù)及指標(biāo)管理:主要對實(shí)時(shí)的Kafka表誉己、Kudu表眉尸、Clickhouse表、Hive表等進(jìn)行統(tǒng)一管理巨双,以數(shù)倉模型中表的命名方式規(guī)范表的命名噪猾,明確每張表的字段含義、使用方筑累,指標(biāo)管理則是盡量通過指標(biāo)管理系統(tǒng)將所有的實(shí)時(shí)指標(biāo)統(tǒng)一管理起來袱蜡,明確計(jì)算口徑,提供給不同的業(yè)務(wù)方使用慢宗;

2. 數(shù)據(jù)質(zhì)量及血緣分析:數(shù)據(jù)質(zhì)量分為平臺(tái)監(jiān)控和數(shù)據(jù)監(jiān)控兩個(gè)部分坪蚁,血緣分析則主要是對實(shí)時(shí)數(shù)據(jù)依賴關(guān)系、實(shí)時(shí)任務(wù)的依賴關(guān)系進(jìn)行分析镜沽。

以上架構(gòu)只是大數(shù)據(jù)平臺(tái)通用的數(shù)據(jù)模型敏晤,如果要具體的建設(shè),需要考慮以下情況缅茉,業(yè)務(wù)需求需要實(shí)時(shí)還是準(zhǔn)實(shí)時(shí)即可嘴脾,數(shù)據(jù)時(shí)效性是秒級還是分鐘級等。

調(diào)度開銷方面蔬墩,準(zhǔn)實(shí)時(shí)數(shù)據(jù)是批處理過程译打,因此仍然需要調(diào)度系統(tǒng)支持,調(diào)度頻率較高拇颅,而實(shí)時(shí)數(shù)據(jù)卻沒有調(diào)度開銷奏司;

業(yè)務(wù)靈活性方面,因?yàn)闇?zhǔn)實(shí)時(shí)數(shù)據(jù)是基于 ETL 或 OLAP 引擎實(shí)現(xiàn)樟插,靈活性優(yōu)于基于流計(jì)算的方式韵洋;

對數(shù)據(jù)晚到的容忍度方面,因?yàn)闇?zhǔn)實(shí)時(shí)數(shù)據(jù)可以基于一個(gè)周期內(nèi)的數(shù)據(jù)進(jìn)行全量計(jì)算黄锤,因此對于數(shù)據(jù)晚到的容忍度也是比較高的麻献,而實(shí)時(shí)數(shù)據(jù)使用的是增量計(jì)算,對于數(shù)據(jù)晚到的容忍度更低一些猜扮;

適用場景方面,準(zhǔn)實(shí)時(shí)數(shù)據(jù)主要用于有實(shí)時(shí)性要求但不太高监婶、涉及多表關(guān)聯(lián)和業(yè)務(wù)變更頻繁的場景旅赢,如交易類型的實(shí)時(shí)分析齿桃,實(shí)時(shí)數(shù)據(jù)則更適用于實(shí)時(shí)性要求高、數(shù)據(jù)量大的場景煮盼,如實(shí)時(shí)特征短纵、流量類型實(shí)時(shí)分析等場景。

3. 實(shí)時(shí)架構(gòu)

在某些場景中僵控,數(shù)據(jù)的價(jià)值隨著時(shí)間的推移而逐漸減少香到。所以在傳統(tǒng)大數(shù)據(jù)離線數(shù)倉的基礎(chǔ)上,逐漸對數(shù)據(jù)的實(shí)時(shí)性提出了更高的要求报破。

于是隨之誕生了大數(shù)據(jù)實(shí)時(shí)數(shù)倉悠就,并且衍生出了兩種技術(shù)架構(gòu)Lambda和Kappa。

1. Lambda架構(gòu)

先來看下Lambda架構(gòu)圖:

Lambda架構(gòu)圖

數(shù)據(jù)從底層的數(shù)據(jù)源開始充易,經(jīng)過Kafka梗脾、Flume等數(shù)據(jù)組件進(jìn)行收集,然后分成兩條線進(jìn)行計(jì)算:

一條線是進(jìn)入流式計(jì)算平臺(tái)(例如 Storm盹靴、Flink或者SparkStreaming)炸茧,去計(jì)算實(shí)時(shí)的一些指標(biāo);

另一條線進(jìn)入批量數(shù)據(jù)處理離線計(jì)算平臺(tái)(例如Mapreduce稿静、Hive梭冠,Spark SQL),去計(jì)算T+1的相關(guān)業(yè)務(wù)指標(biāo)改备,這些指標(biāo)需要隔日才能看見控漠。

為什么Lambda架構(gòu)要分成兩條線計(jì)算?

假如整個(gè)系統(tǒng)只有一個(gè)批處理層绍妨,會(huì)導(dǎo)致用戶必須等待很久才能獲取計(jì)算結(jié)果润脸,一般有幾個(gè)小時(shí)的延遲。電商數(shù)據(jù)分析部門只能查看前一天的統(tǒng)計(jì)分析結(jié)果他去,無法獲取當(dāng)前的結(jié)果毙驯,這對于實(shí)時(shí)決策來說有一個(gè)巨大的時(shí)間鴻溝,很可能導(dǎo)致管理者錯(cuò)過最佳決策時(shí)機(jī)灾测。

Lambda架構(gòu)屬于較早的一種架構(gòu)方式爆价,早期的流處理不如現(xiàn)在這樣成熟,在準(zhǔn)確性媳搪、擴(kuò)展性和容錯(cuò)性上铭段,流處理層無法直接取代批處理層,只能給用戶提供一個(gè)近似結(jié)果秦爆,還不能為用戶提供一個(gè)一致準(zhǔn)確的結(jié)果序愚。因此Lambda架構(gòu)中,出現(xiàn)了批處理和流處理并存的現(xiàn)象等限。

在 Lambda 架構(gòu)中爸吮,每層都有自己所肩負(fù)的任務(wù)芬膝。

1. 批處理層存儲(chǔ)管理主數(shù)據(jù)集(不可變的數(shù)據(jù)集)和預(yù)先批處理計(jì)算好的視圖:

批處理層使用可處理大量數(shù)據(jù)的分布式處理系統(tǒng)預(yù)先計(jì)算結(jié)果。它通過處理所有的已有歷史數(shù)據(jù)來實(shí)現(xiàn)數(shù)據(jù)的準(zhǔn)確性形娇。這意味著它是基于完整的數(shù)據(jù)集來重新計(jì)算的锰霜,能夠修復(fù)任何錯(cuò)誤,然后更新現(xiàn)有的數(shù)據(jù)視圖桐早。輸出通常存儲(chǔ)在只讀數(shù)據(jù)庫中癣缅,更新則完全取代現(xiàn)有的預(yù)先計(jì)算好的視圖。

2. 流處理層會(huì)實(shí)時(shí)處理新來的大數(shù)據(jù):

流處理層通過提供最新數(shù)據(jù)的實(shí)時(shí)視圖來最小化延遲哄酝。流處理層所生成的數(shù)據(jù)視圖可能不如批處理層最終生成的視圖那樣準(zhǔn)確或完整友存,但它們幾乎在收到數(shù)據(jù)后立即可用。而當(dāng)同樣的數(shù)據(jù)在批處理層處理完成后炫七,在速度層的數(shù)據(jù)就可以被替代掉了爬立。

那Lambda架構(gòu)有沒有缺點(diǎn)呢?

Lambda架構(gòu)經(jīng)歷多年的發(fā)展万哪,其優(yōu)點(diǎn)是穩(wěn)定侠驯,對于實(shí)時(shí)計(jì)算部分的計(jì)算成本可控,批量處理可以用晚上的時(shí)間來整體批量計(jì)算奕巍,這樣把實(shí)時(shí)計(jì)算和離線計(jì)算高峰分開吟策,這種架構(gòu)支撐了數(shù)據(jù)行業(yè)的早期發(fā)展,但是它也有一些致命缺點(diǎn)的止,并在大數(shù)據(jù)3.0時(shí)代越來越不適應(yīng)數(shù)據(jù)分析業(yè)務(wù)的需求檩坚。缺點(diǎn)如下:

使用兩套大數(shù)據(jù)處理引擎:維護(hù)兩個(gè)復(fù)雜的分布式系統(tǒng),成本非常高诅福。

批量計(jì)算在計(jì)算窗口內(nèi)無法完成:在IOT時(shí)代匾委,數(shù)據(jù)量級越來越大,經(jīng)常發(fā)現(xiàn)夜間只有4氓润、5個(gè)小時(shí)的時(shí)間窗口赂乐,已經(jīng)無法完成白天20多個(gè)小時(shí)累計(jì)的數(shù)據(jù),保證早上上班前準(zhǔn)時(shí)出數(shù)據(jù)已成為每個(gè)大數(shù)據(jù)團(tuán)隊(duì)頭疼的問題咖气。

數(shù)據(jù)源變化都要重新開發(fā)挨措,開發(fā)周期長:每次數(shù)據(jù)源的格式變化,業(yè)務(wù)的邏輯變化都需要針對ETL和Streaming做開發(fā)修改崩溪,整體開發(fā)周期很長浅役,業(yè)務(wù)反應(yīng)不夠迅速。

導(dǎo)致 Lambda 架構(gòu)的缺點(diǎn)根本原因是要同時(shí)維護(hù)兩套系統(tǒng)架構(gòu):批處理層和速度層伶唯。我們已經(jīng)知道觉既,在架構(gòu)中加入批處理層是因?yàn)閺呐幚韺拥玫降慕Y(jié)果具有高準(zhǔn)確性,而加入速度層是因?yàn)樗谔幚泶笠?guī)模數(shù)據(jù)時(shí)具有低延時(shí)性。

那我們能不能改進(jìn)其中某一層的架構(gòu)瞪讼,讓它具有另外一層架構(gòu)的特性呢岭参?

例如,改進(jìn)批處理層的系統(tǒng)讓它具有更低的延時(shí)性尝艘,又或者是改進(jìn)速度層的系統(tǒng),讓它產(chǎn)生的數(shù)據(jù)視圖更具準(zhǔn)確性和更加接近歷史數(shù)據(jù)呢姿染?

另外一種在大規(guī)模數(shù)據(jù)處理中常用的架構(gòu)——Kappa 架構(gòu)背亥,便是在這樣的思考下誕生的。

2. Kappa架構(gòu)

Kafka的創(chuàng)始人Jay Kreps認(rèn)為在很多場景下悬赏,維護(hù)一套Lambda架構(gòu)的大數(shù)據(jù)處理平臺(tái)耗時(shí)耗力狡汉,于是提出在某些場景下,沒有必要維護(hù)一個(gè)批處理層闽颇,直接使用一個(gè)流處理層即可滿足需求盾戴,即下圖所示的Kappa架構(gòu):

Kappa架構(gòu)

這種架構(gòu)只關(guān)注流式計(jì)算,數(shù)據(jù)以流的方式被采集過來兵多,實(shí)時(shí)計(jì)算引擎將計(jì)算結(jié)果放入數(shù)據(jù)服務(wù)層以供查詢尖啡。可以認(rèn)為Kappa架構(gòu)是Lambda架構(gòu)的一個(gè)簡化版本,只是去除掉了Lambda架構(gòu)中的離線批處理部分剩膘;

Kappa架構(gòu)的興起主要有兩個(gè)原因

Kafka不僅起到消息隊(duì)列的作用衅斩,也可以保存更長時(shí)間的歷史數(shù)據(jù),以替代Lambda架構(gòu)中批處理層數(shù)據(jù)倉庫部分怠褐。流處理引擎以一個(gè)更早的時(shí)間作為起點(diǎn)開始消費(fèi)畏梆,起到了批處理的作用。

Flink流處理引擎解決了事件亂序下計(jì)算結(jié)果的準(zhǔn)確性問題奈懒。

Kappa架構(gòu)相對更簡單奠涌,實(shí)時(shí)性更好,所需的計(jì)算資源遠(yuǎn)小于Lambda架構(gòu)磷杏,隨著實(shí)時(shí)處理的需求在不斷增長溜畅,更多的企業(yè)開始使用Kappa架構(gòu)。但這不意味著kappa架構(gòu)能夠取代Lambda架構(gòu)茴丰。

Lambda和kappa架構(gòu)都有各自的適用領(lǐng)域达皿;例如流處理與批處理分析流程比較統(tǒng)一,且允許一定的容錯(cuò)贿肩,用Kappa比較合適峦椰,少量關(guān)鍵指標(biāo)(例如交易金額、業(yè)績統(tǒng)計(jì)等)使用Lambda架構(gòu)進(jìn)行批量計(jì)算汰规,增加一次校對過程汤功。

還有一些比較復(fù)雜的場景,批處理與流處理產(chǎn)生不同的結(jié)果(使用不同的機(jī)器學(xué)習(xí)模型溜哮,專家系統(tǒng)滔金,或者實(shí)時(shí)計(jì)算難以處理的復(fù)雜計(jì)算)色解,可能更適合Lambda架構(gòu)。

參考文獻(xiàn):https://mp.weixin.qq.com/s/DoDC0lA1WdyXa2r5bCuf7g

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末餐茵,一起剝皮案震驚了整個(gè)濱河市科阎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌忿族,老刑警劉巖锣笨,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異道批,居然都是意外死亡错英,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門隆豹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來椭岩,“玉大人,你說我怎么就攤上這事璃赡∨懈纾” “怎么了?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵鉴吹,是天一觀的道長姨伟。 經(jīng)常有香客問我,道長豆励,這世上最難降的妖魔是什么夺荒? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮良蒸,結(jié)果婚禮上技扼,老公的妹妹穿的比我還像新娘。我一直安慰自己嫩痰,他們只是感情好剿吻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著串纺,像睡著了一般丽旅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纺棺,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天榄笙,我揣著相機(jī)與錄音,去河邊找鬼祷蝌。 笑死茅撞,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播米丘,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼剑令,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拄查?” 一聲冷哼從身側(cè)響起吁津,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎堕扶,沒想到半個(gè)月后腺毫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挣柬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睛挚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片邪蛔。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖扎狱,靈堂內(nèi)的尸體忽然破棺而出侧到,到底是詐尸還是另有隱情,我是刑警寧澤淤击,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布匠抗,位于F島的核電站,受9級特大地震影響污抬,放射性物質(zhì)發(fā)生泄漏汞贸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一印机、第九天 我趴在偏房一處隱蔽的房頂上張望矢腻。 院中可真熱鬧,春花似錦射赛、人聲如沸多柑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竣灌。三九已至,卻和暖如春秆麸,著一層夾襖步出監(jiān)牢的瞬間初嘹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工蛔屹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留削樊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像漫贞,于是被迫代替她去往敵國和親甸箱。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容