我正在MS SQL Server中創建一個ETL過程,並且我想特定於特定行的特定列的錯誤。例如,數據最初從excel文件加載到一個表(我們將調用初始表),其中所有列都是varchar(2000)
,然後將數據轉移到另一個包含更多特定數據類型的表(DataTypedTable),其中包含更多特定數據類型(datetime
, int
等)或更嚴格約束varchar長度。我需要能夠爲特定字段創建錯誤消息,例如: 「1月13日」不是提交日期的有效日期格式。請使用MM/DD/YYYY格式ETL的字段特定錯誤
這些錯誤消息需要以某種方式進行存儲,以便稍後進程中的自動進程可以創建包含錯誤消息的報告,以便每條消息引用特定的行並字段(有人需要返回並更正源系統中的數據並重新提交excel文件)。因此理想情況下,它將插入到某種失敗表中,幷包含失敗行的主鍵,列名和錯誤消息。
問題:所以我想知道這是否可以用SSIS或者像Talend這樣的開源工具來實現,如果是的話,那麼你的一般方法是什麼?或者你會採用什麼手工編碼方式?
夫婦(甚至直到沒有我在SQL特效做ETL手,但我要考慮其他的方法可能C#。)接近,我想用SQL的:
使用光標閱讀通過初始表,併爲每行插入一個空白的記錄,只有主鍵進入DataTyped表,然後爲每個列使用單個更新語句,這樣如果該更新失敗,我可以插入一個特定的錯誤消息錯誤消息表中的列。
將所有數據按原樣插入DataTyped表中,但有重複的列,如SubmissionDate
和SubmissionDateOld
。在初始插入後,舊列有數據,其餘爲空白,並且每個列都有一個更新,以便根據SubmissionDateOld設置SubmissionDate。
除了建議一種方法,我想知道你是否正在使用這種方法或類似的工作。
+1 THANKs,這似乎大部分工作正常,除了錯誤非常模糊,列標識符是數字,並需要一個hackish過程轉換爲名稱。另一個問題是SSIS通常不允許在SQL Server中執行這些操作,例如將字符串「386-」中的輸入區域代碼分配給int列時,它會將其轉換爲負值-386,我寧願發生錯誤。在SQL中,這會產生一個轉換錯誤。我可能需要使用腳本轉換任務,並手動對代碼進行驗證,以使其更加嚴格。 – AaronLS 2010-02-19 18:38:25