2010-02-18 56 views
1

我正在MS SQL Server中創建一個ETL過程,並且我想特定於特定行的特定列的錯誤。例如,數據最初從excel文件加載到一個表(我們將調用初始表),其中所有列都是varchar(2000),然後將數據轉移到另一個包含更多特定數據類型的表(DataTypedTable),其中包含更多特定數據類型(datetimeint等)或更嚴格約束varchar長度。我需要能夠爲特定字段創建錯誤消息,例如: 「1月13日」不是提交日期的有效日期格式。請使用MM/DD/YYYY格式ETL的字段特定錯誤

這些錯誤消息需要以某種方式進行存儲,以便稍後進程中的自動進程可以創建包含錯誤消息的報告,以便每條消息引用特定的行並字段(有人需要返回並更正源系統中的數據並重新提交excel文件)。因此理想情況下,它將插入到某種失敗表中,幷包含失敗行的主鍵,列名和錯誤消息。

問題:所以我想知道這是否可以用SSIS或者像Talend這樣的開源工具來實現,如果是的話,那麼你的一般方法是什麼?或者你會採用什麼手工編碼方式?

夫婦(甚至直到沒有我在SQL特效做ETL手,但我要考慮其他的方法可能C#。)接近,我想用SQL的:

使用光標閱讀通過初始表,併爲每行插入一個空白的記錄,只有主鍵進入DataTyped表,然後爲每個列使用單個更新語句,這樣如果該更新失敗,我可以插入一個特定的錯誤消息錯誤消息表中的列。

將所有數據按原樣插入DataTyped表中,但有重複的列,如SubmissionDateSubmissionDateOld。在初始插入後,舊列有數據,其餘爲空白,並且每個列都有一個更新,以便根據SubmissionDateOld設置SubmissionDate。

除了建議一種方法,我想知道你是否正在使用這種方法或類似的工作。

回答

2

我使用aproach,我把條件分割放入數據流。然後將條件不合格(無效日期,沒有必填字段中的數據等)的記錄發送到包括記錄標識符,不良數據和失敗原因的異常表。然後,您可以稍後根據此信息創建電子表格或文本錯誤文件,以發送回提供該文件的組。當然,良好的記錄會進入pther路徑並插入到表格中。

+0

+1 THANKs,這似乎大部分工作正常,除了錯誤非常模糊,列標識符是數字,並需要一個hackish過程轉換爲名稱。另一個問題是SSIS通常不允許在SQL Server中執行這些操作,例如將字符串「386-」中的輸入區域代碼分配給int列時,它會將其轉換爲負值-386,我寧願發生錯誤。在SQL中,這會產生一個轉換錯誤。我可能需要使用腳本轉換任務,並手動對代碼進行驗證,以使其更加嚴格。 – AaronLS 2010-02-19 18:38:25

0

在加載到分段(稱爲初始表格)表格之前,如何進行一些清理/轉換?將數據從Excel轉儲到製表符或逗號分隔文件,然後使用您選擇的一些編程語言來執行您已注意到的數據清理。另外,每個數據負載有多大?您可以使用多線程或多進程應用程序來處理主要負載(例如,一次加載數百萬行)。在此過程中,您遇到的任何錯誤都可以通過標識符,錯誤和註釋詳細信息加載到異常表中。這種技術有助於在數據清理階段更好地進行控制。

如果負載不是很高,並且想要在數據庫(SQL)中完成大部分工作,那麼您可能希望儘可能多地進行數據分析,並且可以預期可能的數據變化。有了這個,你可以使用適當的組件(Talend或SSIS)來進行轉換或控制數據流。另外,通過使用正則表達式,您可以捕捉到任何偏離設置規則的實體。