數(shù)倉模型也就是數(shù)據(jù)模型(Data Model)是數(shù)據(jù)特征的抽象,它從抽象層次上描述了系統(tǒng)的靜態(tài)特征、動(dòng)態(tài)行為和約束條件,為數(shù)據(jù)庫系統(tǒng)的信息表示與操作提供一個(gè)抽象的框架。數(shù)據(jù)模型所描述的內(nèi)容有三部分,分別是數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)操作和數(shù)據(jù)約束。本題涉及的建模即Hive數(shù)據(jù)倉房體系中數(shù)據(jù)模型的構(gòu)建,大家要區(qū)別其他的模型構(gòu)建。其他的模型構(gòu)建還有:算法建模、業(yè)務(wù)流程建模等,這些描述的又是其他方面的內(nèi)容。模型可更形象、直觀地揭示事物的本質(zhì)特征,使人們對(duì)事物有一個(gè)更加全面、深入的認(rèn)識(shí),從而可以幫助人們更好地解決問題。利用模型對(duì)事物進(jìn)行描述是人們?cè)谡J(rèn)識(shí)和改造世界過程中廣泛采用的一種方法。計(jì)算機(jī)不能直接處理現(xiàn)實(shí)世界中的客觀事物,而數(shù)據(jù)庫系統(tǒng)正是使用計(jì)算機(jī)技術(shù)對(duì)客觀事物進(jìn)行管理,因此就需要對(duì)客觀事物進(jìn)行抽象、模擬,以建立適合于數(shù)據(jù)庫系統(tǒng)進(jìn)行管理的數(shù)據(jù)模型。數(shù)據(jù)模型是對(duì)現(xiàn)實(shí)世界數(shù)據(jù)特征的模擬和抽象。數(shù)據(jù)模型按不同的應(yīng)用層次分成三種類型:分別是概念數(shù)據(jù)模型、邏輯數(shù)據(jù)模型、物理數(shù)據(jù)模型。概念數(shù)據(jù)模型概念數(shù)據(jù)模型(Conceptual Data Model),是一種面向用戶、面向客觀世界的模型,主要用來描述世界的概念化結(jié)構(gòu),它是數(shù)據(jù)庫的設(shè)計(jì)人員在設(shè)計(jì)的初始階段,擺脫計(jì)算機(jī)系統(tǒng)及DBMS的具體技術(shù)問題,集中精力分析數(shù)據(jù)以及數(shù)據(jù)之間的聯(lián)系等,與具體的數(shù)據(jù)管理系統(tǒng)(Database Management System,簡(jiǎn)稱DBMS)無關(guān)。概念數(shù)據(jù)模型必須換成邏輯數(shù)據(jù)模型,才能在DBMS中實(shí)現(xiàn)。在概念數(shù)據(jù)模型中最常用的是E-R模型、擴(kuò)充的E-R模型、面向?qū)ο竽P图爸^詞模型 。邏輯數(shù)據(jù)模型邏輯數(shù)據(jù)模型(Logical Data Model),是一種面向數(shù)據(jù)庫系統(tǒng)的模型,是具體的DBMS所支持的數(shù)據(jù)模型,如網(wǎng)狀數(shù)據(jù)模型(Network Data Model)、層次數(shù)據(jù)模型(Hierarchical Data Model)等等。此模型既要面向用戶,又要面向系統(tǒng),主要用于數(shù)據(jù)庫管理系統(tǒng)(DBMS)的實(shí)現(xiàn)。物理數(shù)據(jù)模型物理數(shù)據(jù)模型(Physical Data Model),是一種面向計(jì)算機(jī)物理表示的模型,描述了數(shù)據(jù)在儲(chǔ)存介質(zhì)上的組織結(jié)構(gòu),它不但與具體的DBMS有關(guān),而且還與操作系統(tǒng)和硬件有關(guān)。每一種邏輯數(shù)據(jù)模型在實(shí)現(xiàn)時(shí)都有其對(duì)應(yīng)的物理數(shù)據(jù)模型。DBMS為了保證其獨(dú)立性與可移植性,大部分物理數(shù)據(jù)模型的實(shí)現(xiàn)工作由系統(tǒng)自動(dòng)完成,而設(shè)計(jì)者只設(shè)計(jì)索引、聚集等特殊結(jié)構(gòu)。數(shù)倉建模在學(xué)習(xí)數(shù)倉前需要知道,當(dāng)今的數(shù)據(jù)處理系統(tǒng),主要分兩大類:OLAP與OLTP。OLAP(On-Line Analytical Processing):聯(lián)機(jī)分析處理OLTP (On-Line Transaction Processing):聯(lián)機(jī)事務(wù)處理聯(lián)機(jī)分析處理是數(shù)據(jù)倉庫的主要應(yīng)用,主要是支持企業(yè)的決策需要提供數(shù)據(jù)支持。聯(lián)機(jī)事務(wù)處理系統(tǒng)側(cè)重系統(tǒng)的日常操作,例如用戶交易、用戶賬戶注冊(cè)、注銷等。對(duì)于事務(wù)型需求場(chǎng)景來說,一般采用三范式規(guī)則構(gòu)建數(shù)據(jù)模型,而對(duì)于分析型的場(chǎng)景多采用維度模型或?qū)挶砟P?,但也不是絕對(duì)的,需要具體問題具體分析。接下來我們先去認(rèn)識(shí)一下這幾個(gè)模型:三范式模型三范式模型又稱關(guān)系型數(shù)據(jù)庫模型關(guān)系:數(shù)據(jù)模型是抽象描述現(xiàn)實(shí)世界的一種工具和方法,是通過抽象的實(shí)體及實(shí)體之間聯(lián)系的形式,來表示現(xiàn)實(shí)世界中事務(wù)的相互關(guān)系的一種映射。所以在數(shù)據(jù)庫中,通過表間的關(guān)系作為現(xiàn)實(shí)中的實(shí)體關(guān)系的映射。通過表間的關(guān)系,也是構(gòu)造出數(shù)據(jù)模型的基礎(chǔ),這樣才能表達(dá)出豐富的業(yè)務(wù)關(guān)系。對(duì)于構(gòu)造關(guān)系數(shù)據(jù)模型,遵循3各最基本的范式:關(guān)系數(shù)據(jù)模型從關(guān)系型數(shù)據(jù)庫的角度出發(fā),結(jié)合了業(yè)務(wù)系統(tǒng)的數(shù)據(jù)模型,能夠比較方便的實(shí)現(xiàn)數(shù)據(jù)倉庫的建模 ;但是建模方法限定在關(guān)系型數(shù)據(jù)庫之上,在某些時(shí)候反而限制了整個(gè)數(shù)據(jù)倉庫模型的靈活性以及性能等,特別是考慮到數(shù)據(jù)倉庫的底層數(shù)據(jù)向數(shù)據(jù)集市的數(shù)據(jù)進(jìn)行匯總時(shí),需要進(jìn)行一定的變通才能滿足相應(yīng)的需求。因此這種建模方式適用于數(shù)據(jù)規(guī)模相對(duì)較小,數(shù)據(jù)表也比較少的場(chǎng)景,并且技術(shù)架構(gòu)采用關(guān)系型數(shù)據(jù)庫實(shí)現(xiàn)的數(shù)據(jù)倉庫。維度模型按照事實(shí)表,維表來構(gòu)建數(shù)據(jù)倉庫,數(shù)據(jù)集市。這種方法的最被人廣泛知曉的名字就是星型模式、雪花模型等。- 優(yōu)點(diǎn):對(duì)于維度建模,針對(duì)各個(gè)維作了大量的預(yù)處理,如按照維進(jìn)行預(yù)先的統(tǒng)計(jì)、分類、排序等。通過這些預(yù)處理,能夠極大的提升數(shù)據(jù)倉庫的處理能力。維度建模非常直觀,緊緊圍繞著業(yè)務(wù)模型,可以直觀的反映出業(yè)務(wù)模型中的業(yè)務(wù)問題。- 缺點(diǎn):由于在構(gòu)建星型模式之前需要進(jìn)行大量的數(shù)據(jù)預(yù)處理,因此會(huì)導(dǎo)致大量的數(shù)據(jù)處理工作。而且,當(dāng)業(yè)務(wù)發(fā)生變化,需要重新進(jìn)行維度的定義時(shí),往往需要重新進(jìn)行維度數(shù)據(jù)的預(yù)處理。而在這些與處理過程中,往往會(huì)導(dǎo)致大量的數(shù)據(jù)冗余。這種建模方式適用于基于Hive構(gòu)建的數(shù)據(jù)倉庫平臺(tái)上。寬表模型寬表模型又稱單例模型,寬表是指一種大表,是將事實(shí)表和維度表進(jìn)行合并形成的表。比如日期維度,將對(duì)應(yīng)的日期維度的列,直接添加到事實(shí)表中,或者商品維度的列也同步加入到事實(shí)表中。那么這樣事實(shí)表的列就非常的多,它所涉及到的維度基本都涵蓋在了一張表中,俗稱All in one。對(duì)于這樣的表,就稱為寬表?;趯挶?,我們可以針對(duì)這一個(gè)表完成許多業(yè)務(wù)指標(biāo)的開發(fā)。- 優(yōu)點(diǎn):在數(shù)據(jù)倉庫建設(shè)中,組織相關(guān)和相似數(shù)據(jù),采用明細(xì)寬表,減少數(shù)據(jù)掃描,提高明細(xì)數(shù)據(jù)表的易用性,以及查詢性能。--數(shù)據(jù)冗余,由于把不同的內(nèi)容都放在同一張表存儲(chǔ),寬表已經(jīng)不符合三范式的模型設(shè)計(jì)規(guī)范,隨之帶來的主要壞處就是數(shù)據(jù)的大量冗余,對(duì)存儲(chǔ)是個(gè)挑戰(zhàn)。--靈活性差,就比如說線上業(yè)務(wù)表結(jié)構(gòu)變更,寬表模式改造量也比較大。--開發(fā)流程變長(zhǎng),我們需要去了解業(yè)務(wù)全流程,得需要知道需擴(kuò)展哪些維度,沉淀哪些指標(biāo),這樣就流程會(huì)比較長(zhǎng),特別是有些業(yè)務(wù)快速迭代的話,就有點(diǎn)捉襟見肘。從規(guī)范化的角度來講,數(shù)據(jù)倉庫的設(shè)計(jì)者是希望越規(guī)范越好,因?yàn)檫@樣會(huì)減少數(shù)據(jù)的冗余,而且也便于模型的擴(kuò)展。從反規(guī)范化的角度來講,數(shù)據(jù)倉庫的使用者是希望使用越方便越好,他們并不太關(guān)心規(guī)范不規(guī)范冗余不冗余,只要用著方便就好。這種情況在工作中是十分常見的,那么該怎樣來解決它?下面有兩個(gè)思路:- 兩種方式都存。雖然,這樣看起來會(huì)占用更多的存儲(chǔ)空間,但不失為一種合適的解決方案,因?yàn)閷挶硎峭ㄟ^別的表拼接而成的,因此寬表的存儲(chǔ)周期是可以短一些。
- 只存多個(gè)維度表,通過視圖來創(chuàng)建寬表。這種方式適合于寬表的查詢次數(shù)較少的情況。比如在Hive中,寬表其實(shí)只是為了計(jì)算出來之后導(dǎo)入Es等系統(tǒng)中供其它系統(tǒng)查詢,那么久沒必要存儲(chǔ)一份寬表,直接通過視圖來封裝就可以。
鑒于以上的一些考量,在數(shù)倉底層可以使用星型模型,而寬表則可以存在于更靠后的層次。數(shù)據(jù)倉庫的分層原因有以下幾點(diǎn):- 把復(fù)雜問題簡(jiǎn)單化:將復(fù)雜的任務(wù)分解成多層來完成,每一層只處理簡(jiǎn)單任務(wù),方便定位問題。
- 減少重復(fù)開發(fā):規(guī)范數(shù)據(jù)分層,通過中間層數(shù)據(jù),能夠減少大量的重復(fù)計(jì)算,增加一次計(jì)算結(jié)果的復(fù)用性。
- 隔離原始數(shù)據(jù):不論是數(shù)據(jù)的異常還是數(shù)據(jù)的敏感性,使真實(shí)數(shù)據(jù)與統(tǒng)計(jì)數(shù)據(jù)解耦開。
數(shù)據(jù)倉庫分層設(shè)計(jì)不同的公司對(duì)數(shù)倉的層級(jí)考量不完全一致,不過業(yè)界比較通用的有這么幾個(gè)層級(jí):ODS層操作數(shù)據(jù)存儲(chǔ)層又稱貼源層,數(shù)據(jù)與原始數(shù)據(jù)的形態(tài)一致,用于存儲(chǔ)各個(gè)系統(tǒng)經(jīng)ETL同步過來的原始數(shù)據(jù)(crm、系統(tǒng)日志等)。在ETL的過程中會(huì)對(duì)數(shù)據(jù)進(jìn)行清洗處理,比如去除或更正數(shù)據(jù)中的錯(cuò)誤值、異常值,客戶年齡登記為1000歲等各種失誤造成的錯(cuò)誤數(shù)據(jù)。處理數(shù)據(jù)中存在的缺失數(shù)據(jù):統(tǒng)一缺失的樣式,在文本文件中可能是\N NULL 或者 / - 等表現(xiàn)形式,在進(jìn)行ETL的時(shí)候?qū)⒏袷浇y(tǒng)一,也可以去分析一些缺失的原因,并對(duì)缺失數(shù)據(jù)進(jìn)行補(bǔ)救性的恢復(fù)工作。DW層這是數(shù)據(jù)倉庫的核心層,在這一層會(huì)對(duì)原始數(shù)據(jù)進(jìn)行更進(jìn)一步的加工處理。具體的又可以劃分為這么幾個(gè)層次:- 數(shù)據(jù)明細(xì)層DWD:明細(xì)層的數(shù)據(jù)粒度與ods層一致,只是做了更進(jìn)一步的清洗和規(guī)范化操作。還可能將一些維度退化到事實(shí)表,從而進(jìn)一步提高后續(xù)應(yīng)用的便利性。
- 數(shù)據(jù)匯總層DWS:根據(jù)數(shù)據(jù)明細(xì)層做一些匯總操作,生成中間結(jié)果,減少后續(xù)應(yīng)用的重復(fù)加工、重復(fù)計(jì)算。根據(jù)分析主題對(duì)數(shù)據(jù)進(jìn)行進(jìn)一步的整合,一般來說是寬表。也可使用維度模型,可參考寬表與維度模型的差異,視情況采用不同策略。
ADS層數(shù)據(jù)應(yīng)用層(或數(shù)據(jù)集市層),為報(bào)表、用戶畫像等數(shù)據(jù)應(yīng)用提供數(shù)據(jù)支撐(數(shù)據(jù)通過CDM層經(jīng)過進(jìn)一步加工而來),一般會(huì)將ADS層的數(shù)據(jù)同步到關(guān)系型數(shù)據(jù)庫,并將同步ADS數(shù)據(jù)后的關(guān)系型數(shù)據(jù)庫也視為數(shù)據(jù)集市層。后續(xù)用戶一般是基于同步到關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)做分析及應(yīng)用的。上面介紹的內(nèi)容即為Hive數(shù)據(jù)倉庫建模的介紹。了解更多數(shù)據(jù)分析知識(shí)、與更多優(yōu)秀的人一起進(jìn)群交流請(qǐng)掃碼
|