除了SQL开发,Dataform也是一个编排工具。它允许我们通过调度工作流的执行来运行数据管道任务。但是如果我们需要从其他Google Cloud服务触发工作流,我们该怎么办?
这篇文章将讨论如何从Cloud Functions启动Dataform工作流的执行过程。这种情况下什么时候会有帮助呢?例如,如果一个数据管道利用Cloud Functions来处理Google Cloud Storage中新增加的文件,并且我们还需要在Dataform中进一步处理这些数据。
本文假设读者熟悉Cloud Functions和基本的Dataform概念[1],并知道如何创建一个Dataform仓库,配置开发环境,开发操作,以及创建和编译发布配置。
Dataform 代码周期[2]包括几个步骤来执行工作流,在我们将动作的代码创建并保存到 GitHub 之后。
- 根据 Git 分支创建发布配置 [3]。
- 编译发布。
- 配置工作流。
- 最后,通过启动一个工作流来执行工作流配置。
所有这些步骤都可以通过 Dataform UI(BigQuery 控制台)来进行,包括 Python 客户库 [4] 或 Dataform API 接口 [5]。
好消息是,如果我们想用Python代码来运行工作流执行,我们不需要在脚本里完成所有这些步骤。相反,我们可以在Dataform UI里面使用前三个步骤,而只需用Python代码执行最后一步。
创建工作流配置所以,如果我们已经在 Dataform 中设置了发布配置并完成了编译,我们必须配置一个可以由外部触发的执行流程。
在“发布和调度”标签下的工作流配置部分,点击CREATE
按钮。输入配置名称,选择发布设置,并选择要执行的操作的名称或标签。例如
创建工作流的配置
我们不需要填写频率字段。如果需要的话,请配置其他执行的选项。然后点击创建
。新的配置会出现在工作流配置部分,Cron调度字段为空白。
接下来,我们需要创建云函数。代码可以是这样的。
from google.cloud import dataform_v1beta1
df_client = dataform_v1beta1.DataformClient()
def run_workflow(project, location, repo_name, workflow_config_name):
# 运行工作流的函数定义
repo_uri = f'projects/{project}/locations/{location}/repositories/{repo_name}'
workflow_config = f'projects/{project}/locations/{location}/repositories/{repo_name}/workflowConfigs/{workflow_config_name}'
request = dataform_v1beta1.CreateWorkflowInvocationRequest(
parent=repo_uri,
workflow_invocation=dataform_v1beta1.types.WorkflowInvocation(
workflow_config=workflow_config
)
)
response = df_client.create_workflow_invocation(request=request)
name = response.name
return name
def main():
# 主函数,定义项目、位置、仓库名和工作流配置名
gcp_project = 'my-project'
location = 'us-east1'
repo_name = 'my-repo-name'
workflow_config_name = 'my_workflow_api_execution'
run_workflow(gcp_project, location, repo_name, workflow_config_name)
return 0
我们来看看上面的代码。
首先,我们从Google Cloud客户端库导入了dataform_v1beta1
模块。接下来,我们创建了一个DataformClient实例,这使我们可以与Dataform API进行交互。
接下来,我们定义了 main
函数,该函数作为脚本的入口。我们设置了工作流的参数,包括 Google Cloud 项目、位置、仓库名称以及工作流配置名称。然后,我们调用了带有指定参数的 run_workflow
函数以运行工作流。
接下来,我们定义了名为 run_workflow
的函数。run_workflow
函数接收四个参数:project
、location
、repo_name
和 workflow_config_name
。我们构建了仓库和工作流配置的 URI,创建了一个 CreateWorkflowInvocationRequest
对象,并将父级设置为仓库 URI。然后,我们将 workflow_config
指定为 WorkflowInvocation
对象中的配置。
接下来,我们调用了 create_workflow_invocation
方法来,并传入了上一步创建的请求对象。并将响应存储在 response 变量中,并提取了工作流调用的名称,其中包含了其唯一的标识符。
如果我们不想使用客户端库的话,可以通过发送 HTTP 请求来使用 Dataform API。
使用 Dataform API HTTP 请求的云函数使用HTTP请求的Dataform API代码可以像这样写。
import google.auth
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
def create_workflow_invocation(project_id, location, repository, workflow_config):
credentials, project = google.auth.default()
credentials.refresh(Request())
service = build('dataform', 'v1beta1', credentials=credentials)
parent = f'projects/{project_id}/locations/{location}/repositories/{repository}'
request_body = {
'workflowConfig': f'projects/{project_id}/locations/{location}/repositories/{repository}/workflowConfigs/{workflow_config}'
}
response = service.projects().locations().repositories().workflowInvocations().create(parent=parent, body=request_body).execute()
return response
def main():
# 主函数,用于执行工作流调用
gcp_project = 'my-project'
location = 'us-east1'
repo_name = 'my-repo-name'
workflow_config_name = 'my_workflow_api_execution'
result = create_workflow_invocation(gcp_project, location, repo_name, workflow_config_name)
在导入和认证部分,我们导入了来自Google Cloud的库,用于认证和API交互。我们使用google.auth.default()
获取默认凭证,并通过Request()
方法刷新,确保凭证是最新的。
接下来,我们定义了名为 main
的函数,该函数作为脚本的入口。我们设置了包括 Google Cloud 项目、位置、仓库名称和工作流配置名称在内的工作流参数。然后,我们使用上述参数调用 create_workflow_invocation
函数来启动工作流。
在 create_workflow_invocation
函数中,我们利用 build
函数来初始化 Dataform 服务并刷新凭证,同时使用提供的项目 ID、位置和仓库名称来构建仓库的父路径 URI。
接下来,我们创建了一个请求正文,其中包含了工作流配置的 URI,这个 URI 是通过提供的项目 ID、位置、仓库名称和工作流配置名称构建的。
我们调用了 Dataform 服务的 workflowInvocations
资源上的 create
方法,并传入了父 URI 和请求体。该响应被保存在变量 response
中,包含创建的工作流调用详情。
在部署其中一个功能之后,我们就可以用它来触发Dataform的工作流执行,作为触发点。
总结通过 Cloud Functions 触发 Dataform 工作流的执行增强了管理和编排的灵活性。无论是处理 GCS 中的新文件,还是响应其他云事件,将 Cloud Functions 与 Dataform 集成可以实现数据工作流的无缝高效执行。可以使用 Google Cloud 客户端库或 Dataform API,您可以通过编程方式轻松启动工作流配置和调用流程,确保您的数据管道保持灵活且稳定。
相关资源- [1] Google Cloud 文档,Dataform 功能介绍.
- [2] Google Cloud 文档,Dataform 中代码生命周期管理.
- [3] Google Cloud 文档,创建发布配置.
- [4] Google Cloud 文档,Python 客户端.
- [5] Google Cloud 文档,Dataform API 参考.
- [6] Google Cloud 文档,创建工作流调用.
共同学习,写下你的评论
评论加载中...
作者其他优质文章