使用 Workflows 和 Cloud Scheduler 安排执行

本文档介绍如何使用 Workflows 和 Cloud Scheduler 运行 Dataform SQL 工作流的计划执行。

关于预定的工作流执行

您可以通过创建触发 Workflows 工作流的 Cloud Scheduler 作业来设置 Dataform SQL 工作流的执行频率。Workflows 在您定义的编排工作流中执行服务。

Workflows 通过两个步骤执行 Dataform SQL 工作流。首先,它会从您的 Git 提供程序中提取您的 Dataform 代码库代码,并将其编译为编译结果。然后,它会使用编译结果创建 Dataform SQL 工作流,并按照您设置的频率执行该工作流。

准备工作

  1. 在 Google Cloud 控制台中,转到 Dataform 页面。

    转到 Dataform 页面

  2. 选择或创建代码库

所需的角色

如需获取使用 Workflows 安排 Dataform 执行所需的权限,请让管理员向您授予代码库的 Dataform Editor (roles/dataform.editor) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建计划编排工作流

如需运行 Dataform SQL 工作流的计划执行,请使用 Workflows 创建编排工作流并将 Cloud Scheduler 作业添加为触发器。

  1. Workflows 使用服务帐号向工作流授予对 Google Cloud 资源的访问权限。创建一个服务帐号,并为其授予 Dataform Editor 角色以及管理编排工作流所需的最低权限。如需了解详情,请参阅授予工作流访问 Google Cloud 资源的权限

  2. 创建编排工作流并将以下 YAML 源代码用作工作流定义:

    main:
        steps:
        - init:
            assign:
            - repository: projects/PROJECT_ID/locations/REPOSITORY_LOCATION/repositories/REPOSITORY_ID
        - createCompilationResult:
            call: http.post
            args:
                url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/compilationResults"}
                auth:
                    type: OAuth2
                body:
                    gitCommitish: GIT_COMMITISH
            result: compilationResult
        - createWorkflowInvocation:
            call: http.post
            args:
                url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/workflowInvocations"}
                auth:
                    type: OAuth2
                body:
                    compilationResult: ${compilationResult.body.name}
            result: workflowInvocation
        - complete:
            return: ${workflowInvocation.body.name}
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID
    • REPOSITORY_LOCATION:您的 Dataform 代码库的位置
    • REPOSITORY_ID:您的 Dataform 代码库的名称
    • GIT_COMMITISH:您要从中执行 Dataform 代码的 Git 分支。对于新创建的代码库,请替换为 main
  3. 使用 Cloud Scheduler 安排编排工作流

自定义 Dataform SQL 工作流创建编译结果请求

您可以更新现有编排工作流,并以 YAML 格式定义 Dataform SQL 工作流创建编译结果请求设置。如需详细了解这些设置,请参阅 projects.locations.repositories.compilationResults REST 资源参考文档。

例如,如需在编译期间向所有操作添加 _dev schemaSuffix,请将 createCompilationResult 步骤正文替换为以下代码段:

    - createCompilationResult:
        call: http.post
        args:
            url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/compilationResults"}
            auth:
                type: OAuth2
            body:
                gitCommitish: GIT_COMMITISH
                codeCompilationConfig:
                    schemaSuffix: dev

您还可以在 Workflows 执行请求中将其他设置作为运行时参数传递,并使用变量访问这些参数。如需了解详情,请参阅在执行请求中传递运行时参数

自定义 Dataform SQL 工作流调用请求

您可以更新现有编排工作流,并以 YAML 格式定义 Dataform SQL 工作流调用请求设置。如需详细了解调用请求设置,请参阅 projects.locations.repositories.workflowInvocations REST 资源参考文档。

例如,如需仅执行包含 hourly 标记且包含所有传递依赖项的操作,请将 createWorkflowInvocation 正文替换为以下代码段:

    - createWorkflowInvocation:
        call: http.post
        args:
            url: ${"https://dataform.googleapis.com/v1beta1/" + repository + "/workflowInvocations"}
            auth:
                type: OAuth2
            body:
                compilationResult: ${compilationResult.body.name}
                invocationConfig:
                    includedTags:
                    - hourly
                    transitiveDependenciesIncluded: true
                

您还可以在 Workflows 执行请求中将其他设置作为运行时参数传递,并使用变量访问这些参数。如需了解详情,请参阅在执行请求中传递运行时参数

后续步骤