??? 數(shù)倉(cāng)治理是一個(gè)非常棘手的問(wèn)題,通常需要跟著業(yè)務(wù)需求快速發(fā)展。可能存在數(shù)據(jù)分散在不同團(tuán)隊(duì)或者團(tuán)隊(duì)之間研發(fā)規(guī)范不一致的情況。從維度模型來(lái)約束規(guī)范的工作來(lái)看,“模型”的治理難度大于“架構(gòu)”。
目前行業(yè)通常的模型治理方法是規(guī)定一種建模規(guī)范,然后各自按照規(guī)范進(jìn)行編碼。當(dāng)業(yè)務(wù)變得模糊不清時(shí),再抽調(diào)時(shí)間進(jìn)行人工治理。這種方法就像清理黃河的流沙一樣,雖然可以清理一次又一次,但上游仍然會(huì)沖下新的流沙。
因此,考慮換個(gè)思路來(lái)解決問(wèn)題。當(dāng)業(yè)務(wù)高速發(fā)展時(shí),數(shù)倉(cāng)必須跟著發(fā)展,否則數(shù)倉(cāng)就沒(méi)有意義了。但是業(yè)務(wù)通常不會(huì)一直處于高速發(fā)展階段,就像長(zhǎng)跑一樣,總會(huì)有跑跑停停的時(shí)候。所以如果我們遵循一定的做事方法,多一些流程步驟,就可以大大延緩數(shù)倉(cāng)治理的問(wèn)題。
換句話說(shuō),不要追求長(zhǎng)期的問(wèn)題解決,而是以一段時(shí)間內(nèi)的穩(wěn)定為目標(biāo),比如一年。當(dāng)業(yè)務(wù)發(fā)展到比較穩(wěn)定的階段時(shí),再來(lái)進(jìn)行治理,既可以避免因業(yè)務(wù)變動(dòng)而影響模型重構(gòu),也能節(jié)省精力和壓力。
完美的解決方案通常是不存在的,所以當(dāng)技術(shù)無(wú)法解決問(wèn)題時(shí),可以嘗試一些另類思路去解決。
數(shù)倉(cāng)的指導(dǎo)思想是以維度建模為基礎(chǔ),根據(jù)業(yè)務(wù)域和數(shù)據(jù)域設(shè)計(jì)主題模型,構(gòu)建一致性的維度和事實(shí)。
具體建模方法如下:首先了解數(shù)據(jù)的統(tǒng)計(jì)周期,是增量同步還是全量同步,并根據(jù)預(yù)估的數(shù)據(jù)量設(shè)計(jì)ODS。其次,大致了解業(yè)務(wù)域的劃分情況,將一類不可拆分的行為作為一類,例如支付、搜索等。然后根據(jù)這些業(yè)務(wù)過(guò)程,構(gòu)建最明細(xì)粒度的事實(shí)表(DWD)?;贒WD,可以根據(jù)主題對(duì)象進(jìn)行數(shù)據(jù)建模,構(gòu)建公共粒度的匯總指標(biāo)事實(shí)表。同時(shí)定義一致性的維度(DIM),通常是靜態(tài)信息,動(dòng)態(tài)可變屬性應(yīng)放到DWD中。
掌握了維度建模的核心思想后,每位研發(fā)同學(xué)都可以開(kāi)始進(jìn)行維度建模了。
掌握建模方法并不意味著可以發(fā)揮創(chuàng)造力,就像谷歌編碼規(guī)范一樣,有很多的Tips要遵循:
表名和字段命名要有規(guī)范,指標(biāo)命名應(yīng)能推測(cè)出大概的涵義;善于利用分區(qū)、臨時(shí)表等方法降低表的依賴層級(jí);擴(kuò)展字段應(yīng)以key-value形式存儲(chǔ),雖然get_json_object操作慢,但簡(jiǎn)潔;小數(shù)精度應(yīng)使用Decimal而不是Double,避免問(wèn)題;對(duì)每個(gè)任務(wù)進(jìn)行摸底,解決可能產(chǎn)生數(shù)據(jù)傾斜的地方,常見(jiàn)于Join的空值問(wèn)題。
數(shù)據(jù)問(wèn)題的檢測(cè)是一個(gè)復(fù)雜的過(guò)程。
通常有三種檢測(cè)方式:基于統(tǒng)計(jì)、基于自動(dòng)規(guī)則和基于價(jià)值衡量。
基于統(tǒng)計(jì)可以統(tǒng)計(jì)ODS/DWD/DWS/ADS層的表數(shù)量、業(yè)務(wù)域的表數(shù)量以及每張表的引用次數(shù)等,從而了解數(shù)倉(cāng)建設(shè)情況。
基于自動(dòng)規(guī)則可以檢測(cè)重復(fù)開(kāi)發(fā)的表,估算表之間的相似程度,推測(cè)是否可以合并。還可以計(jì)算表的主鍵和上下游引用,判斷是否可以合并。這種方法需要對(duì)數(shù)倉(cāng)模型有較深的理解。
基于價(jià)值衡量可以根據(jù)收益和成本對(duì)數(shù)據(jù)表的價(jià)值進(jìn)行衡量,優(yōu)先治理高價(jià)值的場(chǎng)景或者尋找低價(jià)值的重構(gòu)點(diǎn)。這種方法需要考慮收益和成本的平衡。
最后提到了工具的重要性,例如FineDataLink可以幫助解決數(shù)據(jù)表命名、字段命名和權(quán)限問(wèn)題,加速企業(yè)數(shù)據(jù)集成。選擇合適的工具需要結(jié)合實(shí)際情況,目前市場(chǎng)占有率較高的產(chǎn)品是帆軟ETL軟件——FineDataLink。
我們專注高端建站,小程序開(kāi)發(fā)、軟件系統(tǒng)定制開(kāi)發(fā)、BUG修復(fù)、物聯(lián)網(wǎng)開(kāi)發(fā)、各類API接口對(duì)接開(kāi)發(fā)等。十余年開(kāi)發(fā)經(jīng)驗(yàn),每一個(gè)項(xiàng)目承諾做到滿意為止,多一次對(duì)比,一定讓您多一份收獲!