【问题标题】:How to track when rows have been published from Google BigQuery to Pub/Sub?如何跟踪行已从 Google BigQuery 发布到 Pub/Sub?
【发布时间】:2018-04-10 12:03:28
【问题描述】:

我正在使用 cron 作业将数据从 google bigquery(googles SQL 数据仓库)写入 mysql。我们使用 google pub/sub 作为中介(从 bigquery 读取,发布到 pub/sub,然后从 pub/sub 订阅并写入 mysql(在 cloudsql 上))。我们在 bigquery 表的每一行上放置了一个 published_flag 布尔值,以表示一行已成功发布。问题在于 bigquery 每个表每天的 UPDATE/INSERT/DELETE 语句数量有限。此外,我们正在处理数十亿行。这个问题的替代解决方案是什么?是否有任何 GCP 服务或 Web 服务可以更优雅地处理这个问题?

我们目前的选择是:

  1. 购买更多 bigQuery 配额(不可扩展)

  2. 从 bigquery 直接写入 mysql(不健壮和解耦)

  3. 在另一个服务(如 google 数据存储)中有另一个表,用于跟踪已发布的行(看起来并不优雅,而且增加了复杂性)。

  4. 批量更新发布标志(同样不可扩展)

【问题讨论】:

  • 至于 DML 限制,我认为您对此无能为力。 BigQuery 确实不是为 DML 设计的,因此存在硬性限制。但是,您为什么首先将这么多数据从 BigQuery 转移到 MySQL?听起来很奇怪。通常情况正好相反!
  • @GrahamPolley 好问题,在写入 MySql 之前,我们正在聚合和压缩来自 BiQuery 的数据。然后前端可以在从 MySql 查询时进行更快、更便宜的查询。我也知道使用 DML 更新表格不是一个好的解决方案,并且正在寻找一个完全不同的解决方案。
  • 您的工作流程如何?我认为 Cloud Dataflow 是最适合这种情况的云产品。
  • @enlelin 我认为您可能是对的,Cloud Dataflow 可能是将数据从 BigQuery 移动到 PubSub 的一种更合法的方式。我假设 Dataflow 有一种方法可以跟踪哪些行已经发布,因此它们不会再次发布?
  • 我可以说在这种情况下您不必使用 Pub/Sub。您可以使用 BigqueryIO 从 Bigquery 中读取,并使用 JdbcIO 将其写入 SQL 数据库。如果您担心重复数据,请参阅Exactly-once processing in Cloud Dataflow

标签: google-cloud-platform google-bigquery database-migration google-cloud-pubsub


【解决方案1】:

结合 cronjob 和 Pub/SUb 对于这个用例可能不是一个好的选择。最合适的产品应该是Cloud Dataflow,因为它是为 ETL 设计的。在这种特定情况下,您可以使用BigqueryIO 读取BigqueryJdbcIO 将其写入SQL 数据库。

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 2022-01-01
    • 1970-01-01
    • 2018-02-15
    • 2017-05-10
    • 2018-06-22
    • 2021-06-23
    • 2020-02-26
    • 1970-01-01
    相关资源
    最近更新 更多