一下是一段關于ETL程序中增量抽取的描述:
比如一張會員表,它的主鍵是memberID,而會員的狀態是有可能每天都更新的,
我們在第一次抽取之后,生成一張備用表A,包含兩個欄位,第一個是memberID,
第二個是除了memberID之外其他所有欄位拼接起來,再做個Hash生成的欄位,
在下一次抽取的時候,將源表同樣的處理,生成表B,將B和A左關聯,Hash欄位不相等的
為發生變化的記錄,另外還有一部分新增的記錄,
根據這兩部分記錄的memberID去源表中抽取對應的記錄。
根據上面的描述可以吧資料分為新增組合更新組,然后去更新ODS層的資料,那么如果在源系統中某條資料被洗掉,‘ODS中的資料怎么能被洗掉呢,還是說ODS層中的資料不用被洗掉。
uj5u.com熱心網友回復:
接上,如果源表中會員1被洗掉,是不是應該找到這個會員1的ID然后去目標表中洗掉,那應該還有一個洗掉組,但是看了很多相關的文章都只是分成了更新組和新增組,希望各位解答一下疑惑。uj5u.com熱心網友回復:
ODS層的資料是一般是最新的資料或全量資料也可,源系統中如果洗掉一條資料,不需要你去洗掉,你的ods層的處理程式應是自動處理的。uj5u.com熱心網友回復:
首先資料為什么要刪掉呢?就算是取消會員也應該是修改狀態欄位啊。資料倉庫的用戶畫像中一個重要功能就是挖掘這些潛在的客戶,而你直接將這種用戶刪了,那還怎么挖掘?uj5u.com熱心網友回復:
這個問題屬于源系統的不規范,屬于資料治理的范圍有規范的企業對資料洗掉情況使用軟洗掉或回收表的處理方式
如果資料倉庫要發現這種情況,只能周期性通過全表主鍵比對的方式
uj5u.com熱心網友回復:
假如第一次抽取表A中有memberID=‘001’,如你所說源系統該條資料洗掉了,那么第二次抽取表B中就沒有該條資料了,A、B表做個比對就能找到需要洗掉的資料了。有評論說不需要洗掉這些資料,這部分資料本來就是錯誤資料,錯誤的資料如何提供有效的價值呢?uj5u.com熱心網友回復:
如果源有物理洗掉,基于日志的抽取方式就體現出優勢了,抓到的日志根據自己需要處理出增量表,然后按照更新和新增的邏輯處理就是了。資料庫開啟日志記錄的話,洗掉記錄肯定有日志的。uj5u.com熱心網友回復:
表的書記如果是物理洗掉,記錄好洗掉的id,再做ods資料更新的時候,再把這條記錄洗掉掉,原則上一般都不做物理洗掉,都是做邏輯洗掉,打個洗掉標簽。即不存在這種ods與業務系統不一致的情況。uj5u.com熱心網友回復:
看具體使用什么樣的工具,或者技術語言,看您描述來看就是想做cdc的方式進行增量資料的加載。如果上游系統具有邏輯洗掉標志,您的中間表中可以代入這個標志。無論是是hash code或者md5都可以,目的就是為了記錄當前資料的值,而引入洗掉標志可以識別源系統邏輯洗掉的問題。uj5u.com熱心網友回復:
你的問題其實是兩個:1, 如何捕獲資料源洗掉? 通常幾種種方法: 1) 資料源日志, 2)觸發器(性能較差),3)資料源Auditing (似乎沒有),4)目標表掃描 (性能差)
2, ODS 需要不需要洗掉?可以但最好不要這么做。
uj5u.com熱心網友回復:
1.資料源表洗掉資料正常都是加個欄位,打個deletion flag,然后再記錄修改記錄的時間戳。2.真的有洗掉情況的話,建議建個cdc table用來記錄表操作,讀取cdc table中的被洗掉記錄去更新ODS表。(SQL Server)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/69891.html
標籤:數據倉庫
下一篇:mongodb別名設定
