自动将数据上传到 Google Cloud Storage 和 BigQuery

Posted

技术标签:

【中文标题】自动将数据上传到 Google Cloud Storage 和 BigQuery【英文标题】:Automate data upload to Google Cloud Storage and BigQuery 【发布时间】:2021-08-04 09:04:17 【问题描述】:

我正在尝试将一些数据从我的应用程序传输到 Big Query,以便我可以在其上运行 SQL 查询。以下是我正在采取的步骤,并想知道是否有工具可以自动执行此过程。

    从终端手动下载应用程序数据,格式为 JSON。

    运行 python 脚本将此文件解析为可读的 JSON 并进行修改(例如,将空格替换为下划线等,以便能够上传到 Google Cloud Storage (GCS)。

    手动将此更新后的文件上传到 GCS。

    使用来自 GCS 的这些数据,使用架构在 Big Query 中手动生成数据集和表。

有没有办法使用云工具自动化整个过程?我查看了谷歌数据流,但它似乎不是这个工具。或者我应该只拥有一个可以完成上述所有操作的 python 程序?

请指教。

【问题讨论】:

你的文件有多大?你从哪里下载你的文件?来自公共互联网? 此时文件的大小非常小,仍在测试中。数据库目前最多只有大约 1000 行。它是从移动应用程序下载的。 【参考方案1】:

为了解决您的问题,我将编写 3 个服务(例如 Cloud Functions 或 Cloud Run。它是无服务器的,按使用付费,并且通过免费层级,您最终将无需支付任何费用)。

服务 1:下载文件并将其作为原始文件存储在云存储中 服务 2:从存储中获取文件,转换文件并将其作为干净文件存储回存储中 服务 3:在 BigQuery 中加载数据。

这里是事件驱动架构中的流程:

创建一个云调度程序,在您需要下载文件时调用您的服务 1(每天一次,每小时一次,...) 当原始文件存储在 Cloud Storage 中时,会发出一个事件。抓住它来触发你的服务 2(有两种方式可以实现,如果你不知道怎么做,请告诉我) 当干净的文件存储在 Cloud Storage 中时,会发出一个事件。抓住它来触发你的 Service 3

您也可以使用 Cloud Workflow 通过编排来实现相同的目标

在 Cloud Workflow 上部署您的工作流 创建一个云计划程序,在您需要下载文件时调用您的工作流(每天一次,每小时一次,...) 让工作流运行: 调用服务 1。 服务 1 结束后,调用服务 2 服务 2 结束后,调用服务 3

首先,您可以在同一个服务中执行 3 个服务的所有操作。 POC 更容易。但是为了解决方案的可扩展性和演进,最好的设计是限制每个服务的责任。


编辑 1

要从 Cloud Storage 捕捉事件,您有多种解决方案

如果您使用 Cloud Functions,您可以plug it directly on GCS event。 它被命名为后台函数 如果您使用http Cloud Functions或Cloud Run,您可以publish the Cloud Storage events in PubSub。然后,在 PubSub 上,您可以创建一个 push subscription to call an HTTP endpoint(http Cloud Functions 或 Cloud Run)。注意这里的安全。如果你被卡住了,再问我一次。 这是我的首选和最通用的解决方案 如果您使用Cloud Run,您也可以使用Eventarc来捕获Storage事件并调用Cloud Run服务。 EventArc 将之前的解决方案封装在“一键部署”中

【讨论】:

你能指导我触发事件吗?这像 AWS 中的 Lambda 函数吗?此外,我可以阅读确切程序的任何地方都会有所帮助。我对云服务很陌生。只用过 AWS 的一些,Google 没有。 所以我只需要 Google Cloud Scheduler 或 Cloud Workflow? Cloud Scheduler 需要定期启动进程,以调用您的服务 1,或运行工作流执行。 而这 3 个服务将是 GCS 事件触发器,对吗? 不,只有2和3。1,下载文件,由API调用(Cloud Scheduler,或Cloud Workflow)触发【参考方案2】:

了解apache气流和这个框架的谷歌云版本:composer。您可以设置每个任务的工作流程是您提到的步骤。 Airflow 支持很多运算符:BashOperator、PythonOperator、BigQuery、...

【讨论】:

以上是关于自动将数据上传到 Google Cloud Storage 和 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

将文件从 Google Cloud 自动上传到 Big Query

是否可以从 Google Drive 自动将内容上传到 Cloud Storage?

使用 .Net 库将 CSV 文件上传到 Google Cloud Storage

将数据流从 Google Cloud Storage 流式传输到 Big Query

将文件从 Docker 容器上传到 Google Cloud Storage

Google BigQuery:将 ExecuteQuery 结果以 json 格式上传到 Google Cloud Storage