ETL(提取、转换、加载)管道中的自动化是一把双刃剑。一方面,它使我们免于繁琐、重复的任务,加快工作流程,并减少人为错误的可能性。但另一方面,也存在太多自动化的问题——原本旨在让生活变得更简单的事情最终却变得更加复杂、僵化,甚至难以管理。
那么,我们在哪里划清界限呢?我们如何在有效的自动化和过度设计之间取得适当的平衡?让我们以一种愉快、亲切的方式来探索这个问题。
自动化的黄金承诺
让我们设置一个场景:您正在开发一个数据项目,其中原始数据从各种来源涌入。来自应用程序的日志、来自营销的 CSV、来自第三方供应商的 JSON 文件 — 很混乱,对吗?您的 ETL 管道可以助您一臂之力!提取原始数据,将其转换为可用的格式,并将其加载到仓库中,以便您的分析师可以愉快地查询。
自动化自然而然地成为你最好的朋友:
使用 Airflow 或其他协调器安排作业。
使用预构建的库进行常见转换。
监控管道以标记错误。
按需旋转 Glue 或 Databricks 作业。
但是当这位朋友逾期不受欢迎时会发生什么?
过度自动化:当简单变成复杂
想象一下,您正在尝试自动化所有可能的边缘情况,因为您的团队担心手动干预。您编写脚本来处理每个可以想象的数据转换:丢失的列、模式演变、失败的分区和奇怪的文件格式。
很快,您的管道开始类似于鲁布·戈德堡机器 - 一堆错综复杂的作业、脚本、重试和错误处理程序,没有人完全理解。为什么?因为自动化与业务优先级或实际需求不符。
结果:
如果出现故障,故障排除将成为一场噩梦。
新员工茫然地盯着你的脚本并问:“为什么我们又需要那个?”
需求中的小调整会导致大修改。
教训:并非每个问题都需要自动化。了解什么对自动化至关重要,什么更容易手动处理。
在现代数据生态系统中,不缺少“帮助”您自动化 ETL 工作流程的工具:
编排:Apache Airflow、Prefect、Dagster。
转换:dbt、Glue、Spark、Talend。
数据验证:寄予厚望,Deequ。
在某些时候,有人说,“为什么不全部使用它们呢?”
突然,Airflow 触发了 dbt 作业,它调用 Spark 作业,然后将输出记录到 Great Expectations 进行验证。听起来不错,对吧?但现在您已经分层了如此多的工具:
调试问题需要您跳过五个仪表板。
部署管道变得脆弱,因为每个工具都有其怪癖。
维护比最初建造管道需要更长的时间。
课程:使用最小可行堆栈。更多工具并不等于更好的自动化。
仅仅因为你可以自动化某些东西并不意味着你应该这样做。举个例子:
案例 1:自动处理 ETL 作业中的架构不匹配。听起来不错,但如果您的数据模式意外更改,您真的希望您的管道默默地继续前进吗?
案例2:自动删除“有问题”的数据行,无需人工干预。当然,管道成功了,但现在您的报告中缺少数据,并且没有任何错误的痕迹。
ETL 的某些方面(尤其是那些需要判断或监督的方面)最好留给人类。
课程:在有明确、确定性规则的情况下实现自动化。将灰色地带留给人为干预。
现实生活中过度自动化的恐怖故事
一个团队自动化了重试机制,以确保他们的数据处理管道“永远不会失败”。从纸面上看,这是有道理的:如果出现问题,只需重试,直到成功为止。
他们没有预料到的是:错误的上游文件导致他们的管道进入无限重试循环,消耗云资源并产生巨额账单。哎呀!
为了使他们的 ETL 管道变得“通用”,数据团队引入了 100 个参数。新团队成员花更多时间了解要调整哪些参数,而不是做有意义的工作。
讽刺的是,过度参数化的管道不如更简单的硬编码版本灵活。
团队自动监控,针对每次 ETL 故障(无论大小)发送警报。一个月之内,警报就变成了背景噪音。当严重错误发生时,没有人注意到,因为他们已经忽略了噪音。
取得适当的平衡:健康自动化的原则
那么,如何防止 ETL 自动化过度呢?遵循以下原则:
自动化之前,问问自己:
这个过程是否足够频繁以证明自动化是合理的?
失败的成本与手动干预的成本是多少?
从最小的自动化开始。观察痛点,然后自动化这些部分。
不要试图让你的管道防弹,而是让故障浮出水面,以便对其进行分析。构建仪表板和日志,以便清楚地了解问题所在。针对高风险或不明确的场景引入手动干预。
ETL 管道应该易于:
明白。
调试。
延长。
如果添加更多自动化使其中任何一个变得复杂,请重新考虑其必要性。
始终将 ETL 自动化与业务目标联系起来:
它是否为分析师和工程师节省了时间?
它是否提高了数据质量和可靠性?
它会降低运营成本吗?
如果答案是否定的,那么您可能过度自动化。
结论:自动化作为工具,而不是目标
ETL 自动化旨在增强数据团队的能力,而不是让他们负担过重。这是一个工具,而不是最终目标。当自动化程度过高时,它会给您的工作流程带来复杂性、僵化和脆弱性。
关键要点:有意实现自动化。了解每个决策背后的原因,保持流程简单,并为人工监督留出空间。有时,一点点手工工作比一团混乱的过度设计的自动化要好得多。
所以,下次当你发现自己说“让我们也自动化这个”时,停下来问一下:这是必要的吗,还是我正在构建一台 Rube Goldberg 机器?
保持简单。保持可控。保持人性。
以上是ETL 中多少自动化才算是太多自动化的详细内容。更多信息请关注PHP中文网其他相关文章!