首页 > 后端开发 > Python教程 > ETL 中多少自动化才算是太多自动化

ETL 中多少自动化才算是太多自动化

Susan Sarandon
发布: 2024-12-29 08:48:15
原创
731 人浏览过

How Much Automation is Too Much Automation in ETL

ETL(提取、转换、加载)管道中的自动化是一把双刃剑。一方面,它使我们免于繁琐、重复的任务,加快工作流程,并减少人为错误的可能性。但另一方面,也存在太多自动化的问题——原本旨在让生活变得更简单的事情最终却变得更加复杂、僵化,甚至难以管理。

那么,我们在哪里划清界限呢?我们如何在有效的自动化和过度设计之间取得适当的平衡?让我们以一种愉快、亲切的方式来探索这个问题。

自动化的黄金承诺
让我们设置一个场景:您正在开发一个数据项目,其中原始数据从各种来源涌入。来自应用程序的日志、来自营销的 CSV、来自第三方供应商的 JSON 文件 — 很混乱,对吗?您的 ETL 管道可以助您一臂之力!提取原始数据,将其转换为可用的格式,并将其加载到仓库中,以便您的分析师可以愉快地查询。

自动化自然而然地成为你最好的朋友:

使用 Airflow 或其他协调器安排作业。
使用预构建的库进行常见转换。
监控管道以标记错误。
按需旋转 Glue 或 Databricks 作业。

但是当这位朋友逾期不受欢迎时会发生什么?

过度自动化:当简单变成复杂

  1. 无需业务理解的自动化

想象一下,您正在尝试自动化所有可能的边缘情况,因为您的团队担心手动干预。您编写脚本来处理每个可以想象的数据转换:丢失的列、模式演变、失败的分区和奇怪的文件格式。

很快,您的管道开始类似于鲁布·戈德堡机器 - 一堆错综复杂的作业、脚本、重试和错误处理程序,没有人完全理解。为什么?因为自动化与业务优先级或实际需求不符。

结果:

如果出现故障,故障排除将成为一场噩梦。
新员工茫然地盯着你的脚本并问:“为什么我们又需要那个?”
需求中的小调整会导致大修改。

教训:并非每个问题都需要自动化。了解什么对自动化至关重要,什么更容易手动处理。

  1. 工具和框架的过度使用

在现代数据生态系统中,不缺少“帮助”您自动化 ETL 工作流程的工具:

编排:Apache Airflow、Prefect、Dagster。
转换:dbt、Glue、Spark、Talend。
数据验证:寄予厚望,Deequ。

在某些时候,有人说,“为什么不全部使用它们呢?”

突然,Airflow 触发了 dbt 作业,它调用 Spark 作业,然后将输出记录到 Great Expectations 进行验证。听起来不错,对吧?但现在您已经分层了如此多的工具:

调试问题需要您跳过五个仪表板。
部署管道变得脆弱,因为每个工具都有其怪癖。
维护比最初建造管道需要更长的时间。

课程:使用最小可行堆栈。更多工具并不等于更好的自动化。

  1. 自动化不应该自动化的事情

仅仅因为你可以自动化某些东西并不意味着你应该这样做。举个例子:

案例 1:自动处理 ETL 作业中的架构不匹配。听起来不错,但如果您的数据模式意外更改,您真的希望您的管道默默地继续前进吗?

案例2:自动删除“有问题”的数据行,无需人工干预。当然,管道成功了,但现在您的报告中缺少数据,并且没有任何错误的痕迹。

ETL 的某些方面(尤其是那些需要判断或监督的方面)最好留给人类。

课程:在有明确、确定性规则的情况下实现自动化。将灰色地带留给人为干预。

现实生活中过度自动化的恐怖故事

  1. 无法停止运行的管道

一个团队自动化了重试机制,以确保他们的数据处理管道“永远不会失败”。从纸面上看,这是有道理的:如果出现问题,只需重试,直到成功为止。

他们没有预料到的是:错误的上游文件导致他们的管道进入无限重试循环,消耗云资源并产生巨额账单。哎呀!

  1. 参数化之死

为了使他们的 ETL 管道变得“通用”,数据团队引入了 100 个参数。新团队成员花更多时间了解要调整哪些参数,而不是做有意义的工作。

讽刺的是,过度参数化的管道不如更简单的硬编码版本灵活。

  1. 警报变得疯狂

团队自动监控,针对每次 ETL 故障(无论大小)发送警报。一个月之内,警报就变成了背景噪音。当严重错误发生时,没有人注意到,因为他们已经忽略了噪音。

取得适当的平衡:健康自动化的原则
那么,如何防止 ETL 自动化过度呢?遵循以下原则:

  1. 从简单开始,逐步构建

自动化之前,问问自己:

这个过程是否足够频繁以证明自动化是合理的?
失败的成本与手动干预的成本是多少?

从最小的自动化开始。观察痛点,然后自动化这些部分。

  1. 拥抱失败和人工监督

不要试图让你的管道防弹,而是让故障浮出水面,以便对其进行分析。构建仪表板和日志,以便清楚地了解问题所在。针对高风险或不明确的场景引入手动干预。

  1. 遵循 KISS 原则(保持简单、愚蠢)

ETL 管道应该易于:

明白。
调试。
延长。

如果添加更多自动化使其中任何一个变得复杂,请重新考虑其必要性。

  1. 使自动化与业务需求保持一致

始终将 ETL 自动化与业务目标联系起来:

它是否为分析师和工程师节省了时间?
它是否提高了数据质量和可靠性?
它会降低运营成本吗?

如果答案是否定的,那么您可能过度自动化。

结论:自动化作为工具,而不是目标
ETL 自动化旨在增强数据团队的能力,而不是让他们负担过重。这是一个工具,而不是最终目标。当自动化程度过高时,它会给您的工作流程带来复杂性、僵化和脆弱性。

关键要点:有意实现自动化。了解每个决策背后的原因,保持流程简单,并为人工监督留出空间。有时,一点点手工工作比一团混乱的过度设计的自动化要好得多。

所以,下次当你发现自己说“让我们也自动化这个”时,停下来问一下:这是必要的吗,还是我正在构建一台 Rube Goldberg 机器?

保持简单。保持可控。保持人性。

以上是ETL 中多少自动化才算是太多自动化的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板