技術棧|"0000-00-00"日期格式你是認真的麼?

技術棧|"0000-00-00"日期格式你是認真的麼?淺談日期類型數據質量問題

數據中心經常會接觸到各類時間日期的數據,有時可能為DATE型、有時可能為VARCHAR型。而不管是什麼格式類型的數據,在同步的時候會涉及到入庫和格式轉換。但你碰到過"0000-00-00"格式的數據麼 ?

技術棧|

此類數據明顯有問題,因為ORACLE是不會允許年份、日期、時間出現0的情況。而且如果通過ETL工具查詢或抽取時都會報錯,

技術棧|

既然ORACLE不允許存放"0000-00-00"這樣的數據,那麼此問題真實的原因是什麼?


技術棧|

通過對比業務系統此數據的狀態,我們終於知道了此日期是"5589-06-10"。此錯誤數據在前端程序往數據庫中插入的時候發生了錯誤,導致數據庫中出現了一條違背常識的"0000-00-00"。那麼此問題真實的原因,是在於業務系統對於DATE格式的數據在錄入的時候沒有校驗機制,造成數據庫中存放了錯誤格式的數據,而此數據在涉及到查詢、ETL等過程中必定會拋出一個ORA-01847的錯誤。

問題找到了,但是如何解決呢?一方面我們需要聯繫業務系統廠商解決前端程序對日期格式數據的校驗問題,一方面還可以在數據同步時,通過"邪道"解決。

技術棧|

例如利用CASE WHEN函數做一個簡單的判斷,把所有含"0000"的數據,統一定義為"0001-01-01"這樣一個"貌似"正確的數據,其他格式正確的數據正常輸出。這樣既保證了數據同步的及時性,也方便後期針對問題數據進行集中處理。

在ETL過程中,我們會碰到各種各樣的"奇葩"問題,但只要認真、細緻,問題還是可以解決。"搞數據",我們是認真的!


分享到:


相關文章: