ETL反典:没有错误处理逻辑

Etl.反典:没有错误处理逻辑我通常避免在绝对中谈论技术,但在这里’■我可以在没有保留的情况下分享:在足够长的时间表上,每一个ETL进程最终都会失败。您的ETL设计是否构建以处理故障?

我看到了太多的SSIS包,ADF数据厂房以及假设100%成功构建的数据移动应用程序,没有任何可能进行故障。在这个Etl反图特图邮报中,我’LL讨论ETL流程中跳过错误处理逻辑的愚蠢。

Etl.反典:没有错误处理逻辑

想象一下,您正在为公司构建数据负载过程的方案,以便在公司车辆上跟踪遥测。在这种情况下,您将导入每辆车’遥测数据在报告数据库中的常见表中,从哪个公司’S用户可以在上次看到车辆的位置报告,它的速度有多快,如果静止,它已经闲置了多长时间。

现在暂时让’■假设在该数据的负载期间,网络打嗝导致将数据移动到报告表中的中间暂时的连接丢失。加载了一些数据,有些没有’T。负责检查此负载状态的人员发现它失败了,再次运行它,而且它成功加载。

因为在以前的负载中,它已经加载了一些(但不是全部)的数据,它’目的表现在有可能重复:失败期间加载的部分数据集,以及来自随后的成功负载的全套数据。结果是数据消费者现在将看到该车辆的多个遥测记录。至少,这将是一种烦恼。

现在想象一下,第二个数据是’T车辆遥测,但银行交易,或可能的总帐条目。如果由于ETL错误,您的数据错误,客户,投资者和监管机构将是非常不可触益的。

设计ETL

即使是最强大的提取 - 转换负载过程也会在某些时候失败。即使ETL代码中没有缺陷,也存在超出该过程的控制–网络,身份验证和DNS,名称为几个–这可能会破坏负荷。在构建ETL Load Logic时,必须超越只要成功的有效载荷应该看起来应该是什么样的,但如果该负载失败的任何组件将发生什么。

在我的 培训课程,我教人们考虑在ETL进程中处理的错误处理作为功能的核心部分而不是事后。由于数据移动和转换的基本性,错误的处理必须是主要关注的问题,而不仅仅是在开发周期结束时螺栓的东西。

拥有旨在解决故障的ETL有两个不同的好处:

  • 当发生错误时,它允许更明确的分辨率路径
  • 它有助于防止在发生故障时将目的地端点留在不一致的部分加载状态中

误差处理模式

Etl.错误处理通常属于以下类别之一:

没有错误处理(仅让进程失败)

这是最常见的模式,因为它是默认行为。请记住,这是一些负载的有效设计模式–例如,如果您截断并加载暂存表,那么’在错误的情况下,S通常在让负载失败时造成的伤害很小。您可以重新运行相同的负载,因为它每次都会截断并重新加载暂存表。

撤消负载所做的更改

使用此设计模式,您可以以这样的方式构建ETL逻辑,即它将撤消如果发生故障所做的任何更改。这通常通过显式事务(在关系数据库端点的情况下)或将删除或恢复在失败负载期间所做的更改的脚本来实现。

错误后继续负载

在某些情况下,您可能会发现即使遇到一个或多个错误,也可能会让负载运行更值。这通常是在行或源级别配置的,允许单行或源失败,同时允许其余的后续行或步骤完成。

对于任何这些设计模式,您应该确保任何错误或异常都是 正确登录.

不可否认,建立失败的ETL流程是一种悲观的方法。但是,由于数据专业人员的第一份工作是保护数据的完整性,因此应该始终以谅解的方式接近ETL设计,因为这些过程中的每一个都会在某些时候失败。

关于作者

Tim Mitchell
Tim Mitchell is a 数据架构师和顾问 谁专注于摆脱数据疼痛点。 需要帮助数据仓库,ETL,报告或 训练?如果是这样的话, 联系Tim. 没有义务30分钟聊天。

发表评论

本网站使用AkisMet减少垃圾邮件。 了解如何处理评论数据.