数据工作流和管道通常需要精确协调才能保证任务按正确顺序执行。有向无环图 (DAG) 是一种强大的工具,可以有效管理这些工作流并避免错误。
在本文中,我们将探讨 DAG 及其在数据工程中的重要性,回顾它们的一些应用,并通过使用Airflow 的实际示例了解如何使用它们。
什么是 DAG?
要理解什么是 DAG,我们首先来定义一些关键概念。在计算机科学中,图是一种由节点和边组成的非线性数据结构。节点表示单个实体或对象,而边连接这些节点并表示它们之间的关系或连接。
在有向图中,这些边具有特定的方向,表示节点之间的单 瑞士赌博数据 向关系。这意味着,如果有一条边从节点 A 到节点 B,则它意味着从 A 到 B 的连接,但不一定是从 B 到 A 的连接。
上图显示了一个有向图,其中三个节点相互连接。下图显示了一个无向图,其中最后两个节点具有双向关系。
有向图的视觉解释。图片来源:天文学家
路径是由有向边连接的一系列节点。它从特定节点开始,然后沿着边的方向到达另一个节点。路径可以是任意长度,从单个节点到多个节点的序列,只要始终遵循边的方向即可。
现在我们有了一些基本的定义,让我们看看什么是 DAG:DAG 是一个没有有向环的有向图,其中每个节点代表一个特定的任务,每条边表示它们之间的依赖关系。
左图为非循环图,其中四个任务相互连接,没有循环。右图为非循环图,其中任务 1 和任务 4 之间存在循环关系无环图的视觉解释。图片来源:天文学家
DAG 的关键之处在于它们是非循环的,这意味着一旦您从一个节点开始,就只能向前移动,永远不会返回到上一个节点。这确保任务可以按顺序执行而不会导致无限循环。DAG 通常具有层次结构,其中任务被组织成级别或层。较高级别的任务通常依赖于较低级别的任务的完成。
成为一名数据工程师
培养 Python 技能,成为一名专业的数据工程师。
为什么 DAG 在数据工程中如此重要
作为数据工程师或执行数据工程任务的人员,您经常面临构建复杂数据管道的挑战,这些管道需要执行步骤,每个步骤都依赖于前一个步骤。这就是 DAG 的作用所在!
由于 DAG 可以将任务表示为节点,将依赖项表示为边,因此它们可以强制执行逻辑执行顺序,确保任务根据其依赖项按顺序执行。这可以防止因任务无序运行而导致的错误和不一致。此外,如果某个步骤失败,DAG 可以识别并重新运行受影响的任务,从而节省时间和精力。
如果您是数据管道构建的新手或想要加强基础知识,那么“理解数据工程”课程将为您提供一个很好的起点。
DAG 的非循环特性是使其成为数据管道的理想选择的关键特性之一。它们确保任务可以在没有无限循环或递归依赖的情况下执行,从而避免导致系统不稳定。
让我们考虑一个数据管道的简单示例:
该图显示了 A DAG,其中节点 a 连接到 B 和 C,然后连接到 D,最后连接到 E这个简单的 DAG 结构包含节点 A、B、C、D 和 E 及其依赖项。图片由作者提供。
在上面的 DAG 中,节点 A 表示数据整理步骤,涉及数据清理步骤,其中对提取的数据进行清理和预处理。节点 B 和 C 表示特征工程步骤,其中清理后的数据被独立转换为两个特征。节点 D 涉及合并特征。最后,节点 E 表示模型训练步骤,其中在转换后的数据上训练机器学习模型。
DAG 并不关心任务内部发生什么,而是关心任务的执行顺序。
此外,DAG 还使您能够创建自动化、可扩展的数据工作流,尤其是在分布式系统和云环境中。它们将复杂的数据处理任务分解为更小、独立、可管理的子任务,从而使 DAG 能够并行执行并高效利用资源。这种可扩展性在处理大型数据集和复杂的数据管道时尤为重要,因为它可以实现经济高效的数据处理。
最后,DAG 可以提供任何数据管道的可视化表示,帮助您理解和传达工作流程。与其他团队成员或非技术利益相关者合作时,这种视觉清晰度非常重要。如果您能理解数据流和任务之间的依赖关系,就更容易识别和修复问题、优化资源利用率并就管道改进做出明智的决策。
Python 中的 ETL 和 ELT课程是创建和优化数据管道实践的绝佳资源。
什么是 DAG?带有示例的实用指南
-
- Posts: 317
- Joined: Mon Dec 23, 2024 5:02 am