我正在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