连接两个大型数据集的最佳策略
Best strategy for joining two large datasets
我目前正在尝试寻找处理两个非常大的数据集的最佳方法。
我有两个 BigQuery 表:
- 一个 table 包含流事件(十亿行)
- 一个 table 包含标签和关联的事件属性(100 000 行)
我想根据事件属性用适当的标签标记每个事件(一个事件可以有多个标签)。然而,SQL 交叉连接对于数据集大小来说似乎太慢了。
使用 mapreduces 管道并避免的最佳方法是什么
非常昂贵的洗牌阶段,因为每个事件都必须与每个标签进行比较。
我还打算使用 Google Cloud Dataflow,这个工具适合这个任务吗?
Google Cloud Dataflow 非常适合这种情况。
假设标签数据足够小以适合内存,您可以通过将其作为 SideInput.
传递来避免随机播放
您的管道如下所示
- 使用两个 BigQueryIO 转换来读取每个 table。
- 创建一个 DoFn 来标记每个事件的标签。
- DoFn 的输入 PCollection 应该是事件。将标签的 table 作为侧输入传递。
- 使用 BigQueryIO 转换将结果写回 BigQuery(假设您要使用 BigQuery 进行输出)
如果您的标签数据太大而无法放入内存,您很可能必须使用 Join。
我目前正在尝试寻找处理两个非常大的数据集的最佳方法。
我有两个 BigQuery 表:
- 一个 table 包含流事件(十亿行)
- 一个 table 包含标签和关联的事件属性(100 000 行)
我想根据事件属性用适当的标签标记每个事件(一个事件可以有多个标签)。然而,SQL 交叉连接对于数据集大小来说似乎太慢了。
使用 mapreduces 管道并避免的最佳方法是什么 非常昂贵的洗牌阶段,因为每个事件都必须与每个标签进行比较。
我还打算使用 Google Cloud Dataflow,这个工具适合这个任务吗?
Google Cloud Dataflow 非常适合这种情况。
假设标签数据足够小以适合内存,您可以通过将其作为 SideInput.
传递来避免随机播放您的管道如下所示
- 使用两个 BigQueryIO 转换来读取每个 table。
- 创建一个 DoFn 来标记每个事件的标签。
- DoFn 的输入 PCollection 应该是事件。将标签的 table 作为侧输入传递。
- 使用 BigQueryIO 转换将结果写回 BigQuery(假设您要使用 BigQuery 进行输出)
如果您的标签数据太大而无法放入内存,您很可能必须使用 Join。