【问题标题】:Automating import of Google Cloud Storage file to Google Cloud MySQL table自动将 Google Cloud Storage 文件导入 Google Cloud MySQL 表
【发布时间】:2021-07-27 05:26:53
【问题描述】:

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

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

【问题讨论】:

  • 您如何处理 MySQL 中的数据?是为了低延迟服务吗?还是用于数据分析(因为您是数据分析师!)?
  • 我想将它读入 Data Studio 并在那里创建一些图表/即。我最初在 GCS 中使用了我的 CSV,但它现在超过了 100MB 的文件大小限制,所以我不得不使用不同的方法进行数据访问

标签: mysql google-cloud-platform automation google-cloud-storage google-cloud-sql


【解决方案1】:

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

  1. 我放弃了我的 MySQL 实例,转而使用 BigQuery 表。我考虑使用联合表(外部数据源,适合像我这样的新手),但读取时间很慢并且可能需要定期探索数据,我认为这对我来说太笨重了。

  2. 我创建了一个函数,当在我的 GCS 存储桶中添加或覆盖文件时触发该函数。此函数导致 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. 对于那些想知道我的修改的人:

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

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

存在一个小的权限问题,以确保与该函数关联的服务帐户可以访问我的文件/存储桶,但没有什么太大的问题。测试该函数显示成功,我的 BigQuery 表按预期更新。我将在接下来的几个晚上进行监控,以确保这继续有效并编辑此回复,以防我因任何不可预见的原因被误认为。

【讨论】:

    【解决方案2】:

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

    我认为,您可以编写函数。那个功能,如果doc添加了云存储,它会读取所有doc并在MySQL中写入表的相关部分。

    或者

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

    【讨论】:

    • 我认为我需要帮助的是您的部分选项(使用 gcloud 命令工具),因为它们有点超出我的专业知识。我已经阅读了文档,但我不清楚如何在没有示例的情况下实际执行此操作
    【解决方案3】:

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

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

    您还可以读取文件并将结果存储在带有INSERT ... SELECT ... 语句的表中。

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


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

    您还有很多很棒的文章来解释如何使用 PartitioningClustering 限制 BigQuery 的成本;我也wrote an article where I talk about Quotas

    【讨论】:

    • 我正在查看 BigQuery,但看起来它的起价仅为每月 480 美元左右,这远远超出了我必须使用的预算,除非我误解了 BigQuery 的定价......
    • 我错误地查看了 BigTable,而不是 BigQuery。我将我的 CSV 文件加载为 BigQuery 中的表,该表非常适合查询,并且似乎可以很好地连接到 Data Studio。是否知道 BigQuery 表是否会随着 GCS 存储桶中的 CSV 更新而更新?我的管道将在凌晨 3 点运行,所以我可以等到明天,但我很想在那之前设定我的期望......
    • 如果您使用联合查询,BigQuery 会在 GCS 中读取 CSV,而不是在 BigQuery 表中。
    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 2023-04-08
    • 2018-04-24
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2018-04-22
    相关资源
    最近更新 更多