将 Google 云存储文件自动导入到 Google 云 MySQL table

Automating import of Google Cloud Storage file to Google Cloud MySQL table

目前,我在 GCS 存储桶中有一个 CSV,它每天通过 Google 云上托管的管道进行更新。我已经使用此 CSV 通过云 UI 导入功能在 MySQL 数据库中填充 table 没有问题。

我想做的是每天在设定的时间导入 运行 以更新 table 数据,因为我的管道将更新我的 CSV。我没有看到任何 UI 功能可以做到这一点,我不确定最好的方法是什么。与 SWE 相比,我更像是一名数据分析师,因此尝试破译像 Cloud 运行 这样的功能有点棘手......

目前,GCP 为其产品、BigQuery、Cloud Spanner、DataStore 等提供默认管道。这些管道由 Dataflow 提供。 Dataflow 不支持云存储上的文本文件到云 SQL(Mysql 等)

我觉得,你可以写函数。该功能,如果doc添加了Cloud Storage,它会读取所有doc并将table的相关部分写入MySQL。

您可以使用 gcloud 命令工具或 restapi(测试版)自动导入到 MySQL。 为了更好地理解read this doc.

如果你有 CSV,并且想在 Datastudio 中可视化数据,我建议你使用 BigQuery。这是一个具有大量功能的 PB 数据仓库!!

其中之一是直接从云存储中读取数据并进行查询的能力:Federated queries。它不是最有效的,但它对你最有用。

您还可以使用 INSERT ... SELECT ... 语句读取文件并将结果存储在 table 中。

您终于可以在 BigQuery 中 load the CSV file 了。也不是很难,但需要更多代码(在 Cloud Storage 中创建文件时捕获事件,然后将其加载到 BigQuery)。但是对于像这样的简单代码,我相信您可以找到 Cloud Functions 和 Cloud 运行.

的示例

因此,当数据在 BigQuery 中时,您可以简单地使用 SQL 查询来请求它们,就像使用 MySQL 一样。 BigQuery 是一种无服务器产品,您只需为存储的数据量(如果存储在 BigQuery 中,则为存储在 Cloud Storage 中的数据量)以及您处理的数据量付费。

您还有很多很棒的文章来解释如何使用 Partitioning and Clustering; I also wrote an article where I talk about Quotas

来限制 BigQuery 的成本

更新:我最后做了一些事情来解决我的问题。 TL;DR BigQuery + 事件触发函数:

  1. 我放弃了 MySQL 实例,转而使用 BigQuery table。我考虑过使用联合 table(外部数据源,对于像我这样的新手来说)但是读取速度慢并且可能需要定期探索数据,我觉得这对我来说太笨重了。

  2. 我创建了一个函数,该函数在我的 GCS 存储桶中添加或覆盖文件时触发。此函数导致对我的 table 进行 CSV 导入,并通过一些修改允许我截断(覆盖)数据,这对于我的管道设置方式很有用。感谢 guillaume blaquiere 和 Mehmet Karakose 建议了这条路径,但我本身还不够熟练,无法自己实际编写和设置函数。

  3. 为了实现#2,我使用了 rickt.org 中的这个非常方便的指南:https://rickt.org/2018/10/22/poc-automated-insert-of-csv-data-into-bigquery-via-gcs-bucket-python/。这给出了编写和设置函数以触发 GCS 存储桶更改的分步过程。

  4. 对于那些对我的修改感到疑惑的人:

    一个。我添加了一个 job_config.write_disposition 行设置为 WRITE_TRUNCATE 用于覆盖

    b。我还将 uri 值更改为仅包含我指定的一个 CSV,而不是存储桶中的所有文件。

有一个小的权限问题,以确保我的 file/bucket 可以通过与该功能关联的服务帐户访问,但没有太大的问题。测试功能显示成功,我的 BigQuery table 按预期更新。我将在接下来的几个晚上进行监控,以确保它继续有效并编辑此回复,以防我因任何不可预见的原因而被误认为。