本文档介绍了拆分 Dataform 代码库和管理跨代码库依赖项的策略。
仓库是 Dataform 中的核心单元。代码库存储构成 SQL 工作流的所有 SQLX 和 JavaScript 文件,以及 Dataform 配置文件和软件包。您可以将 SQL 工作流存储在单个代码库中,也可以在多个代码库之间拆分 SQL 工作流。
在 Dataform 中拆分代码库具有以下优势:
- 遵守 Dataform 对编译资源使用量的限制。 将大型 SQL 工作流拆分为多个较小的代码库,可以降低超出 Dataform 编译资源限制的风险。
- 精细化流程。您可以为 SQL 工作流的每个分块片段及其开发团队单独设置流程(例如持续集成 [CI] 规则)。
- 细化权限。您可以为 SQL 工作流的每个分块以及开发该分块的团队分别设置权限,以增强 SQL 工作流的整体安全性。
- 通过尽可能减少在 SQL 工作流的每个分屏 fragment 上工作的协作者数量,从而改进协作。
- 提高了代码库的可读性。将构成大型 SQL 工作流的文件拆分到多个代码库中,比一次浏览整个 SQL 工作流更容易单独浏览每个代码库。
- 与执行整个 SQL 工作流相比,加快 SQL 工作流的每个分块片段的工作流执行速度。
在 Dataform 中拆分代码库会带来以下缺点:
- 每个 Dataform 代码库及其对应的 Git 代码库所需的自定义持续集成/持续开发 (CI/CD) 配置。
- 每个 Dataform 代码库及其对应的 Git 代码库所需的自定义安排配置。
- 难以管理存储在多个代码库中的工作流对象之间的依赖项。
- 缺少对分布在多个代码库之间的 SQL 工作流的全面有向无环图 (DAG) 可视化。在每个代码库中,生成的 DAG 仅代表完整 SQL 工作流的一部分。
拆分代码库的策略
拆分代码库时,您需要将构成父 SQL 工作流的文件划分为存储在 Dataform 单独代码库中的较小的子 SQL 工作流。
您可以选择通过以下任一方式拆分代码库:
- 每个开发团队 1 个代码库。
- 每个领域(例如销售、营销或物流)1 个代码库。
- 每个网域 1 个中央代码库和 1 个存储库,该存储库使用中央代码库的内容作为数据源。
如需将父级 SQL 工作流存储在第三方 Git 托管平台中,您需要将包含子工作流的每个单独代码库分别连接到专用的第三方 Git 代码库。
管理跨仓库依赖项
拆分代码库的最有效方法是将父级 SQL 工作流划分为自包含的子级 SQL 工作流,从而创建独立的代码库。独立仓库不会将其他仓库的内容用作数据源。这种方法不需要管理跨仓库依赖项。
如果无法避免跨仓库依赖项,您可以通过将仓库拆分为一系列仓库来管理它们,其中一个仓库依赖于其前身,并是其后继仓库的数据源。存储库及其依赖项的继承必须最能反映父级 SQL 工作流的结构。
您可以使用 Dataform 数据源声明在仓库之间创建依赖项。您可以将其他 Dataform 仓库中的 BigQuery 表类型声明为当前所编辑仓库中的数据源。声明数据源后,您可以像引用任何其他 Dataform SQL 工作流对象一样引用它,并使用它来开发 SQL 工作流。
当您安排在具有跨仓库依赖项的仓库之间拆分 SQL 工作流的执行时,您必须按照跨仓库依赖项的顺序逐个执行这些仓库。
我们建议避免将代码库拆分为包含双向依赖项的一组代码库。当某个仓库是另一个仓库的数据源,同时也使用该仓库作为数据源时,就会出现仓库之间的双向依赖关系。存储库之间的双向依赖关系会使父 SQL 工作流的调度和执行以及开发流程变得复杂。
后续步骤
- 如需了解代码库大小对 Dataform 中开发的影响,请参阅代码库大小概览。
- 如需了解如何在 Dataform 中创建代码库,请参阅创建 Dataform 代码库。
- 如需了解如何将 Dataform 代码库连接到第三方 Git 代码库,请参阅连接到第三方 Git 代码库。