問題: ODS有的公司說幾乎不處理,有的說這一層要做第一次數(shù)據(jù)清洗,你怎么看?
討論一: 我感覺基本的監(jiān)控要做,然后字段類型,命名統(tǒng)一可以做,ip轉(zhuǎn)地址也可以做。復(fù)雜的 不太容易做,數(shù)據(jù)源的接入不一定都可控。
討論二: 看數(shù)據(jù)的規(guī)整性吧。有的公司業(yè)務(wù)方數(shù)據(jù)很規(guī)整。ODS層只用做簡單的砍字段即可,有的業(yè)務(wù)數(shù)據(jù)不規(guī)整比如埋點類的那么不做清洗就肯定不行了。有公司是從業(yè)務(wù)庫直接到ODS,那么需要做備份, 有的是從業(yè)務(wù)庫到匯總庫再到ODS。那么匯總庫就可以看作是備份了。
討論三: 個人覺得ODS層的數(shù)據(jù)還是需要清洗并存入到數(shù)據(jù)倉庫比較合適。如果不清洗,是ETL任務(wù)的計算資源和計算時間的浪費(fèi)。
除非是有特殊需要,規(guī)定要原汁原味的“原始數(shù)據(jù)”。
補(bǔ)充 這個問題,從本質(zhì)上來看,其實是和分層的設(shè)計以及公司的業(yè)務(wù)場景相關(guān)的。 先拋開公司的業(yè)務(wù)場景來看ODS的設(shè)計,我們其實是希望ODS的數(shù)據(jù)盡量“原汁原味”,但又相對干凈。
那么,這個尺度或者說標(biāo)準(zhǔn)怎么來把握?簡單來看,我們會讓ODS層的數(shù)據(jù)內(nèi)容和粒度與原始數(shù)據(jù)一致,然后我們會做表命名統(tǒng)一、字段命名統(tǒng)一、數(shù)據(jù)落地監(jiān)控等內(nèi)容。
然后對于數(shù)據(jù)清洗,居士個人建議是盡量少做清洗,如果在這一層做清洗,建議只在幾種情況下做清洗:
1. 簡單的數(shù)據(jù)標(biāo)準(zhǔn)化,比如表和字段命名
2. 默認(rèn)值填充,比如性別為空的都補(bǔ)0
3. 清洗規(guī)則十分明確,比如說說字段拆解: 接收到的json數(shù)據(jù)拆成多個明確字段 其余情況下不是不能做清洗,而是說盡量少做清洗,因為一旦對原始數(shù)據(jù)稍作破壞,以后追查數(shù)據(jù)的成本會十分巨大。
當(dāng)我們明確ODS的職責(zé)后,再來看不同公司的ODS設(shè)計。如果說數(shù)據(jù)源很干凈,那么直接拿來就可以,基本不用處理。如果說數(shù)據(jù)源很混亂,而且清洗的規(guī)則十分明確,不會出現(xiàn)返工的情況,那么就可以在入ODS之前做一部分的清洗。