1

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

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

问:所以我想知道这是否可以通过 SSIS 或一些开源工具(如 Talend)来完成,如果可以,您的一般方法是什么?或者你会采取什么手工编码的方法?

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

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

将所有数据按原样插入 DataTyped 表中,但具有重复的列,如SubmissionDateSubmissionDateOld。在初始插入 *Old 列有数据后,其余列是空白的,并且我对基于 SubmissionDateOld 设置 SubmissionDate 的每一列进行了一次更新。

除了建议一种方法之外,我想知道您是否正在使用该方法或在您所做的工作中已经使用的类似方法。

4

2 回答 2

2

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

于 2010-02-18T21:46:27.667 回答
0

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

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

于 2010-06-02T00:26:35.593 回答