【问题标题】:Cloud Dataflow: Generating tables in BigQueryCloud Dataflow:在 BigQuery 中生成表
【发布时间】:2017-03-27 10:15:07
【问题描述】:

我有一个从 Cloud Pub/Sub 读取流数据的管道,这些数据由 Dataflow 处理,然后保存到一个大型 BigQuery 表中,每个 Pub/Sub 消息都包含一个关联的 account_id。确定新的 account_id 后,有没有办法即时创建新表?然后用来自关联 account_id 的数据填充它们?

我知道这可以通过为每个新帐户更新管道来完成。但在理想情况下,Cloud Dataflow 会以编程方式在代码中生成这些表。

【问题讨论】:

  • 我的理解是否正确 - 您直到运行时才知道管道中这些 BigQuery 表/接收器的名称,即它们是动态的。对吗?
  • 正确,我想以动态方式在运行时创建表。我确实知道他们的名字,但我们一直在获得新帐户,并且不断更新每个帐户的管道是不省时的。
  • 为所有帐户使用一张大表的问题是:遍历每个帐户的行数据的成本和速度。

标签: google-bigquery google-cloud-dataflow google-cloud-pubsub


【解决方案1】:

想分享我看到的几个选项

选项1 - 等待Partition on non-date field 功能
不知道何时实施并可供我们使用,因此它可能不是您现在想要的。但是当它上线时——这将是这种情况下的最佳选择

选项 2 – 您可以将您的 account_id 散列到预定义数量的存储桶中。 在这种情况下,您可以预先创建所有这些表,并且在您的代码中具有将根据帐户哈希处理相应目标表的逻辑。与查询该数据的查询中需要使用的哈希逻辑相同

【讨论】:

    【解决方案2】:

    用于创建 BigQuery 表的 API 位于 https://cloud.google.com/bigquery/docs/reference/rest/v2/tables/insert

    不过,如果您将所有帐户存储在一个包含 account_id 作为一列的静态表中,可能会更容易。

    【讨论】:

    • 虽然更容易,但对我的组织来说也更昂贵​​。有没有办法使用云数据流解决上述问题?
    • 请参阅 Mikhail Berlyant 的回复。如果您想最小化工作,非日期字段上的分区是最佳选择。
    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 2016-11-02
    • 1970-01-01
    • 2022-01-01
    • 2018-01-19
    相关资源
    最近更新 更多