數(shù)據(jù)漂移問題與解決

什么是數(shù)據(jù)漂移

通常我們把從源系統(tǒng)同步進(jìn)入數(shù)倉的第一層數(shù)據(jù)稱為 ODS或者staging層數(shù)據(jù),接入層 。
數(shù)據(jù)漂移是接入層數(shù)據(jù)的一個(gè)頑疾。

數(shù)據(jù)漂移定義:接入層表同一個(gè)業(yè)務(wù)日期數(shù)據(jù)中包含前一天或者后一天凌晨附近的數(shù)據(jù)或者丟失當(dāng)天的變更數(shù)據(jù)。

數(shù)據(jù)漂移出現(xiàn)的原因

一般數(shù)倉的接入層都需要存儲(chǔ)歷史數(shù)據(jù),按照一定時(shí)間段來切分進(jìn)行分區(qū)存儲(chǔ),一般選擇某個(gè)時(shí)間戳字段進(jìn)行切分。而這些時(shí)間戳字段的準(zhǔn)確性是導(dǎo)致數(shù)據(jù)漂移的根本原因。

通常,時(shí)間戳字段分為四類:

  • modified_time:數(shù)據(jù)庫記錄某條數(shù)據(jù)更新的時(shí)間。
  • log_time:數(shù)據(jù)庫日志記錄某條數(shù)據(jù)更新的時(shí)間。
  • proc_time:具體業(yè)務(wù)過程發(fā)生時(shí)間。
  • extract_time:數(shù)據(jù)記錄被抽取時(shí)間。

假設(shè)接入層將每日接入的數(shù)據(jù)存儲(chǔ)到一個(gè)分區(qū):

  • 同一條記錄的數(shù)據(jù)抽取時(shí)間extract_time明顯是晚于另外三個(gè)時(shí)間的,如果用這個(gè)字段切分,ODS某個(gè)分區(qū)中的數(shù)據(jù)會(huì)包含前一天末尾的數(shù)據(jù),并丟失當(dāng)天末尾的數(shù)據(jù)。
  • 如果用數(shù)據(jù)庫記錄的更新時(shí)間modified_time,前臺業(yè)務(wù)系統(tǒng)手工訂正數(shù)據(jù)時(shí)可能會(huì)遺忘同步更新該時(shí)間,導(dǎo)致該抽取的數(shù)據(jù)被遺漏掉。
  • 另外,由于網(wǎng)絡(luò)或者系統(tǒng)壓力問題,log_time或者modified_time可能會(huì)晚于proc_time,導(dǎo)致數(shù)據(jù)漂移。
  • 如果我們直接使用proc_time時(shí)間進(jìn)行切分,這種情況僅僅對包含一個(gè)業(yè)務(wù)過程的ODS表有效果,如果該表每條記錄需要存儲(chǔ)多個(gè)業(yè)務(wù)過程,則用proc_time切分會(huì)丟失其他發(fā)生在當(dāng)天的業(yè)務(wù)過程記錄。
    以上就是出現(xiàn)數(shù)據(jù)漂移的主要原因。

處理數(shù)據(jù)漂移的方式

常用的方式是將ODS每個(gè)時(shí)間分區(qū)中向前、向后多冗余一些數(shù)據(jù),保障數(shù)據(jù)只會(huì)多不會(huì)少,具體數(shù)據(jù)切分時(shí)讓數(shù)倉接入層的下一層按照具體的業(yè)務(wù)場景用不同的業(yè)務(wù)時(shí)間proc_time來限制。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容