加入两个大型数据集的最佳策略

时间:2015-10-21 08:43:18

标签: mapreduce google-cloud-dataflow

我目前正在尝试找到处理两个非常大的数据集的最佳方法。

我有两个BigQuery表:

  • 一个包含流式事件的表(十亿行)
  • 一个包含标签和相关事件属性(100 000行)的表

我想根据事件属性(事件可以有多个标记)使用适当的标记标记每个事件。但是,对于数据集大小,SQL交叉连接似乎太慢了。

使用mapreduces管道并避免使用的最佳方法是什么 非常昂贵的随机播放阶段,因为必须将每个事件与每个标签进行比较。

此外,我计划使用Google Cloud Dataflow,此工具是否适合此任务?

1 个答案:

答案 0 :(得分:3)

Google Cloud Dataflow非常适合这种情况。

假设标签数据足够小以适应内存,您可以通过将其作为SideInput传递来避免混乱。

您的管道将如下所示

  • 使用两个BigQueryIO转换从每个表中读取。
  • 创建DoFn以使用其代码标记每个事件。
  • 您的DoFn的输入PCollection应该是事件。将标签表作为侧面输入传递。
  • 使用BigQueryIO转换将结果写回BigQuery(假设您要将BigQuery用于输出)

如果您的代码数据太大而无法容纳在内存中,则很可能需要使用Join