连接两个大型数据集的最佳策略

Best strategy for joining two large datasets

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

我有两个 BigQuery 表:

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

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

我还打算使用 Google Cloud Dataflow,这个工具适合这个任务吗?

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

假设标签数据足够小以适合内存,您可以通过将其作为 SideInput.

传递来避免随机播放

您的管道如下所示

  • 使用两个 BigQueryIO 转换来读取每个 table。
  • 创建一个 DoFn 来标记每个事件的标签。
  • DoFn 的输入 PCollection 应该是事件。将标签的 table 作为侧输入传递。
  • 使用 BigQueryIO 转换将结果写回 BigQuery(假设您要使用 BigQuery 进行输出)

如果您的标签数据太大而无法放入内存,您很可能必须使用 Join