我正在 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 表中,但具有重复的列,如SubmissionDate
和SubmissionDateOld
。在初始插入 *Old 列有数据后,其余列是空白的,并且我对基于 SubmissionDateOld 设置 SubmissionDate 的每一列进行了一次更新。
除了建议一种方法之外,我想知道您是否正在使用该方法或在您所做的工作中已经使用的类似方法。