ETL的字段特定错误

时间:2010-02-18 20:35:15

标签: sql ssis etl talend

我正在MS SQL Server中创建一个ETL进程,我希望特定于特定行的特定列的错误。例如,数据最初从excel文件加载到一个表(我们将调用Initial表)中,其中所有列都是varchar(2000),然后我将数据转移到包含更多特定数据的另一个表(DataTypedTable)类型(datetimeint等)或更严格约束的varchar长度。我需要能够为特定字段创建错误消息,例如: “1月13日”不是提交日期的有效日期格式。请使用MM / DD / YYYY

的格式

这些错误消息需要以某种方式存储,以便稍后在过程中自动化过程可以创建带有错误消息的报告,以便每条消息引用特定的行和字段(有人需要返回并更正源系统中的数据并重新提交excel文件)。理想情况下,它会被插入到某种类型的Failures表中,并包含失败行的主键,列名和错误消息。

问题:所以我想知道这是否可以通过SSIS或Talend这样的开源工具来完成,如果是这样,那么您的一般方法是什么?或者您将采用什么手动编码方式?

我曾经想过使用SQL的几种方法(直到我没有在SQL过程中手动完成ETL,但我想考虑其他方法。可能的C#甚至。):

使用游标读取Initial表,并为每一行插入一个只有主键的空白记录到DataTyped表中,然后对每列使用单个update语句,这样如果更新失败,我可以插入特定于错误消息表中该列的特定错误消息。

将所有数据按原样插入DataTyped表中,但具有重复的列,如SubmissionDateSubmissionDateOld。在初始插入之后,* Old列有数据,其余的是空白,我对每个列都有一个更新,根据SubmissionDateOld设置SubmissionDate。

除了提出一种方法之外,我想知道你是否正在使用这种方法或类似的东西。

2 个答案:

答案 0 :(得分:2)

我使用aproach将条件拆分放入数据流中。然后将条件失败的记录(无效日期,所需字段中没有数据等)发送到异常表,该异常表包括记录标识符,错误数据及其失败的原因。然后,您可以稍后根据此信息创建错误的电子表格或文本文件,以将其发送回提供该文件的组。好的记录当然会进入pther路径并插入到表中。

答案 1 :(得分:0)

在加载到暂存(你称之为初始表)表之前,如何进行一些清理/转换?将数据从Excel转储到制表符或逗号分隔文件,然后使用您选择的某些编程语言来执行您已注意到的数据清理。另外,每个数据负载有多大?您可以使用多线程或多进程应用程序来处理主要负载(例如一次加载几百万行)。在此过程中,您遇到的任何错误都可以加载到具有标识符,错误和注释详细信息的异常表中。这种技术有助于在数据清理阶段更好地控制。

如果负载不是那么高,并且您希望在数据库(SQL)中完成大部分工作,那么您可能希望尽可能多地进行数据分析,并且可以很好地理解可能出现的数据变化。有了它,您可以使用适当的组件(Talend或SSIS)来进行转换或控制数据流。此外,通过使用正则表达式,您可以捕获任何偏离设置规则的实体。