代码之家  ›  专栏  ›  技术社区  ›  AaronLS

ETL的字段特定错误

  •  1
  • AaronLS  · 技术社区  · 15 年前

    我正在ms sql server中创建一个etl进程,我希望有特定于特定行的特定列的错误。例如,数据最初是从excel文件加载到一个表中(我们称之为初始表),其中所有列都是 varchar(2000) 然后将数据转移到另一个表(datatypedtable),该表包含更具体的数据类型( datetime , int 等)或更严格限制的varchar长度。我需要能够为特定字段创建错误消息,例如: “1月13日”不是提交日期的有效日期格式。请使用mm/dd/yyyy格式

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

    问题: 所以我想知道这是否可以通过ssis或者像talend这样的开源工具来实现,如果可以,您的一般方法是什么?或者你会采取什么手工编码的方法?

    我考虑过使用sql的两种方法(直到没有,我在sql过程中手工完成etl,但我想考虑其他方法)。可能为偶数:

    使用光标读取初始表,对于每一行,在数据类型表中插入一个只有主键的空白记录,然后为每一列使用一个update语句,这样,如果更新失败,我可以在err中插入一个特定于该列的错误消息。或消息表。

    将所有数据按原样插入到数据类型表中,但有重复的列,如 SubmissionDate SubmissionDateOld . 在初始插入之后,*old列有数据,其余为空,我对每一列都有一个更新,它基于submissiondateold设置submissiondate。

    除了建议一种方法外,我想知道你是否正在使用这种方法或类似的方法。

    2 回复  |  直到 12 年前
        1
  •  2
  •   HLGEM    15 年前

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

        2
  •  0
  •   Andrew Barber Eric Lafortune    12 年前

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

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