使用 Workflows 和 Cloud Scheduler 安排执行

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

有计划的工作流执行简介

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

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

准备工作

  1. 在 Google Cloud 控制台中,进入 Dataform 页面。

    前往 Dataform 页面

  2. 选择或创建代码库

所需的角色

如需获得使用工作流程安排 Dataform 执行所需的权限,请让您的管理员为您授予代码库的 Dataform Editor (roles/dataform.editor) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

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

创建安排的编排工作流

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

  1. Workflows 使用服务账号向工作流授予对Google Cloud 资源的访问权限。创建一个服务账号,并向其授予 Dataform 编辑器角色以及管理编排工作流所需的最低权限。如需了解详情,请参阅授予工作流访问 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

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

自定义 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
                

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

后续步骤