簡體   English   中英

數據庫 ETL 設計問題

[英]Database ETL Design Question

我收到的用於例行刷新的數據集包含一個實際上是 VARCHAR 的日期字段。

由於這將是一個索引/搜索字段,我只剩下...
1) 將字段轉換為 DATETIME 並在刷新時驗證和規范化數據值
或者...
2)保持數據原樣並形成我的查詢以適應各種有效的日期格式,即 WHERE DateField = 'CCYYMMDD' OR DateField = 'MM/DD/CCYY' OR....

更新將每月一次; “清理”數據將使 ETL 周期增加約 35% 的時間。 我對日期字段的查詢都是相等的; 我不需要范圍搜索。 另外,我是一家單人店,所以整體解決方案越多越好。

那么我最好在哪種情況下做呢? 所有意見表示贊賞。

我認為這是一個很好的問題。 這是我的看法:

我堅信,從長遠來看,通過將數據類型用於預期目的,您將節省更多時間並減少麻煩。 這意味着日期字段中的日期,字符字段中的字符等。如果您使用選項 2 go,則每次查詢 table 時都需要記住為所有各種可能的日期格式編碼。 如果你把它寫下來,一年后回來,你會記得嗎?

相比之下,如果您使用日期字段並在 ETL 過程中正確處理日期的前期工作,您將始終知道如何與該字段進行交互。 而且我什至不會涉及性能影響。

在這種情況下,我不確定你是否會看到短期利益。 例如,如果源數據中有 5 種不同的可能日期格式,您將需要以一種或另一種方式加以考慮; 在 ETL 或 output 查詢中。 在 ETL 中轉換這 5 種格式的代碼並不比在 output 查詢中管理這 5 種格式的代碼復雜。

而且,如果數據實際上可以以無數種格式到達,那么無論哪種方式,您都會遇到很大的問題。 您的 ETL 會中斷,或者您的查詢會中斷。 在某種程度上,它是一種不可簡化的復雜性。

我建議您花時間將正確的轉換編碼到您的 ETL 中。 但請幫自己一個忙,編寫一個預處理步驟,以識別無法正確轉換的格式的日期並提醒您注意它們。 如果你看到模式; 即,如果任何格式出現不止一次,請為其編寫轉換代碼。 隨着時間的推移,您將不得不手動清理這些討厭的日期越來越少。 運氣好的話,你的 35% 會下降到 5% 或更少。

祝你好運!

你最好清理數據。 不是好日期的第一次約會是沒有意義的,所以存儲它們是沒有意義的。 其次,晚修復一個錯誤的數據類型選擇比永遠不做它更難。 查詢不僅更容易,而且比使用 varchar 更快。 諸如訂購之類的東西以及日期功能都可以正常工作。 第三,我無法想象清理它會為您的導入增加那么多,我一直清理數據而沒有問題。 但如果是這樣,則清理暫存表中沒有其他進程正在使用的數據(因此您不會影響 prod 上的用戶),然后從干凈的數據加載到 prod 表。

預先清理數據並將日期存儲為日期。

我使用將日期存儲為字符串的系統,並且似乎有無數種存儲日期的方法。 這使得創建查詢以針對未來的新日期格式工作變得非常困難。

如果您將日期存儲為字符串,那么您應該應用約束以確保數據以正確的格式存儲。 或者,只需將日期字符串轉換為日期,然后讓數據庫自己應用有效的日期約束。 通常最好讓數據庫為您完成工作。

最好清理數據並加載到日期列中,因為這將確保完整性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM