【问题标题】:Dynamic partitioning in google cloud dataflow?谷歌云数据流中的动态分区?
【发布时间】:2015-05-24 08:21:24
【问题描述】:

我正在使用数据流来处理存储在 GCS 中的文件并写入 Bigquery 表。以下是我的要求:

  1. 输入文件包含事件记录,每条记录对应一个事件类型;
  2. 需要按 eventType 对记录进行分区;
  3. 对于每个 eventType 输出/写入记录到相应的 Bigquery 表,每个 eventType 一个表。
  4. 每批输入文件中的事件各不相同;

我正在考虑应用诸如“groupByKey”和“partition”之类的转换,但似乎我必须在开发时知道确定分区所需的事件数量(和类型)。

你们有一个好主意来显着地进行分区吗?意思是分区可以在运行时确定?

【问题讨论】:

  • 嗨!为自定义 I/O 提供更大的灵活性是目前正在开发的一项功能。随着这项工作的进展,我们将牢记这一用例。
  • 谢谢马特!您认为该功能何时准备就绪?
  • 我们目前无法评论具体的时间表,但这是我们正在积极努力的事情。
  • @Echo,对于复活很抱歉,但是您找到了一个好的解决方案吗?特别是关于处理动态事件的部分。我们正在做类似的事情,目前我们想出的最简单和最具成本效益的方法是将文件下载到计算引擎实例,通过脚本(python)在本地对其进行分区,将分区文件上传回 GCS,然后为每个文件调用 bq 命令以导入相关的“事件”表。

标签: google-bigquery google-cloud-dataflow


【解决方案1】:

为什么不将所有内容加载到单个“原始”bigquery 表中,然后使用 BigQuery API 确定不同数量的事件并将每种事件类型导出到其自己的表(例如,通过 https://cloud.google.com/bigquery/bq-command-line-tool#createtablequery)或 API 调用?

如果您的输入格式很简单,您可以完全不使用数据流来做到这一点,而且它可能会更具成本效益。

【讨论】:

  • 这听起来不错,但我怎么能确定 bigquery 方法真的更具成本效益?
  • 可能只能通过帐单。我看到 bigquery 数据加载是免费的 (cloud.google.com/bigquery/#pricing),但不确定是否拆分到其他表。一般来说,BigQuery 听起来更高效,因为它可以更有效地利用硬件。但也许 Dataflow 团队的某个人会有更好的答案。
  • 很难确定,但我认为有理由怀疑 BigQuery 单独用于此特定目的会更便宜。无论如何,Dataflow 管道都会产生与管道中 BigQuery 使用相关的所有费用。似乎您的示例不需要太多计算,这是 Dataflow 擅长的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 2019-11-21
相关资源
最近更新 更多