首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >编排小型python任务的最佳实践(主要是在BigQuery中执行SQL )

编排小型python任务的最佳实践(主要是在BigQuery中执行SQL )
EN

Stack Overflow用户
提问于 2020-04-16 09:58:48
回答 2查看 763关注 0票数 2

我们正在使用GCP中的公共和云功能来协调我们的数据工作流。

我们的工作流程类似于:

gcp

pubsub1和pubsub3可以在不同的时间触发(例如:凌晨1点和凌晨4点)。他们每天被触发,从外部来源(我们的ETL,Talend)。

我们的云函数基本上在BigQuery中执行SQL。

这很好,但是我们必须手动创建一个编排数据库来记录函数何时开始和结束(回答“函数X已执行好吗?”的问题)。业务逻辑与业务逻辑有很强的耦合,因为云功能必须知道之前必须执行哪些功能,以及之后要触发哪些pubsub。

因此,我们正在寻找一个分离业务逻辑和业务逻辑的解决方案。

我发现composer (气流)可以是一个解决方案,但是:

  • 它不能以本地方式运行云功能(使用API,它非常有限,每个项目有16个调用par 100秒)
  • 我们可以在气流中与BigQuery操作员一起使用BigQuery,但是业务流程和业务逻辑将再次强烈耦合。

那么,在我们的案例中,什么是最好的实践呢?

谢谢你的帮忙

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-17 10:08:22

您可以使用Composer (气流),并且仍然可以重用大部分现有的设置。

首先,您可以保留所有现有的云功能,并使用HTTP触发器 (或您喜欢的其他函数)在气流中触发它们。您需要做的唯一改变就是在气流中实现一个PubSub传感器,因此它会触发您的云功能(从而确保您可以从流程的末端控制编排)。

您的解决方案将是一个气流达格,它根据PubSub消息触发云函数,如果函数成功,则报告回气流,然后,如果两者都成功,则使用HTTP触发器或类似的方法触发第三个云函数,相同。

最后一个注意事项,这不是立即直观的。气流不是为了运行作业本身,而是为了协调和管理依赖关系。事实上,使用由气流触发的云功能并不是一种反模式,实际上是一个最佳实践。

在您的情况下,您可以100%重写一些东西并使用BigQuery操作符,因为您不做任何处理,只触发查询/作业,但这个概念仍然正确,最佳实践是利用气流来确保事情发生在您需要的时间和顺序,而不是处理这些事情本身。(希望这有任何意义)

票数 2
EN

Stack Overflow用户

发布于 2020-04-17 10:51:35

作为气流的替代方案,我会看一看"argo工作流程“-> https://github.com/argoproj/argo

它没有作曲家的开销,特别是对于较小的工作量。

我会:

创建一个从外部工具读取pubsub消息的部署,并将其部署到kubernetes。

基于消息执行工作流。工作流中的每个步骤都可以是一个云函数,打包在docker中。

(我会用kubernetes作业替换云函数,然后由工作流触发。)

用docker打包云功能并在kuberentes中运行是非常直接的。

存在带有gsutil/bq/gcloud的预构建坞映像,因此您可以创建bash脚本,使用"bq“命令行执行bigquery中的内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61247490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档