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