2010-02-18 55 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)来进行转换或控制数据流。另外,通过使用正则表达式,您可以捕捉到任何偏离设置规则的实体。