在 gcp 中读取和写入 bigquery。啥服务?
Posted
技术标签:
【中文标题】在 gcp 中读取和写入 bigquery。啥服务?【英文标题】:Reading and writing to bigquery in gcp. What service?在 gcp 中读取和写入 bigquery。什么服务? 【发布时间】:2021-02-06 06:59:58 【问题描述】:我正在创建一个 bigquery 表,我在其中连接和转换来自其他几个 bigquery 表的数据。这一切都是用 sql 编写的,整个查询大约需要 20 分钟才能运行,并且由几个 sql 脚本组成。我还在创建最终表之前创建了一些中间表。
现在我想让上面的查询更加健壮并安排它,但我无法决定该工具。我正在考虑的替代方案。
使其成为数据流作业并使用云调度程序进行调度。这感觉可能有点矫枉过正,因为所有代码都在 SQL 中并且来自 bq --> bq。
创建计划查询以加载数据。没有这方面的经验,但看起来很安静
创建一个使用 BQ API 执行所有 sql 的 python 脚本。创建一个 cron 作业并安排它在 GCP 中的某个位置运行。
对于首选解决方案有何建议?
【问题讨论】:
你看过使用 dbt 吗? 查看***.com/a/62312437/5221944 - 忽略该帖子的 sftp 部分 - 只关注 Magnus 工具 - 它解决了您问题中提到的许多问题 【参考方案1】:如果它被封装在一个脚本(甚至多个)中,我会通过 BQ 安排它。它将处理您的查询与其他选项没有什么不同,因此为它设置额外的服务没有意义。
您能否将其作为单个查询运行?
【讨论】:
不,它必须是几个查询。这就是我目前在本地机器上使用 python 脚本运行它的原因。不确定是否可以在预定查询中创建依赖项,但如果可以,那似乎是最好的选择 您可以将已完成的预定查询通知发送到 pubsub,这意味着您可以触发云功能并链接一堆按需预定查询。 (还没有看到这样做,但应该是很好的教程。)要么是这样,要么是设置时间间隔足够的空间来完成上一个查询。如果您需要多个依赖项,那么值得使用 Cloud Composer 之类的编排工具。如果成本是 Composer 的一个问题,您可以使用 Python 在 VM 中对其进行编码,并使用调度程序和函数来调度轻量级 VM,并在完成后将其关闭。 感谢您的回复。由于我们目前在项目中有一个作曲家环境,我现在倾向于在其中运行它并创建一个将每个查询作为任务的 DAG。还将对查询进行一些很好的概述,并且可以一键触发【参考方案2】:根据我在 GCP 方面的经验,正如您所建议的,Cloud Composer 和 Dataflow 作业都过于矫枉过正。这些产品都不是无服务器的,并且由于实例在后台运行,可能意味着更高的经济成本。
另一方面,您可以定期(每天、每周等)创建计划查询,这些查询由足够大的时间窗口分隔,以确保查询按预期顺序执行。从这个意义上说,最终表将由中间表正确构建。
在我看来,执行 Python 脚本和向 Pub/Sub 发送通知以触发云函数(如 apw-ub 建议的那样)也是不错的选择。
总而言之,我想最终的决定应该更多地取决于您的个人喜好。请随时使用 Google Cloud 定价计算器 (1) 估算每个选项的成本。
【讨论】:
以上是关于在 gcp 中读取和写入 bigquery。啥服务?的主要内容,如果未能解决你的问题,请参考以下文章
使用 apache beam 中的 beam.io.gcp.bigquery.WriteToBigQuery 模块写入日期分区的 Bigquery 表
如何使用 python 将字典写入 Dataflow 中的 Bigquery