运行多个连接时,Beam SQL / Apache Beam速度较慢

问题描述 投票:0回答:1

使用Beam SQL在2个表上进行连接时,它正常工作提供了预期的性能,但随着我的连接表增加,性能变得最差。

下面是我的代码片段,它可以帮助您调试Beam SQL中的Joining条件以获得更好的性能。

PCollection<Row> outputStream2 = PCollectionTuple.of(new TupleTag<>("corporation1"), sourceData)
                .and(new TupleTag<>("dim"), dimtable).and(new TupleTag<>("place"), placeData)
                .and(new TupleTag<>("principle"), principle).apply(SqlTransform.query(
                        "Select d.merchant,d.corporation1,d.place,d.principal,c.corporation1_sk,r.place_sk,p.principal_sk FROM dim d LEFT JOIN corporation1 c ON c.corporation1 = d.corporation1 LEFT JOIN place p ON p.place = d.place and c.corporation1 = p.corporation1 "));

我可以做任何更好的方式加入Beam SQL / Apache Beam,因为表中的顺序连接,

前一个输出负责下一个表连​​接的位置。我已经尝试过使用Co-GroupBy和SideInput混合方法,其中Table中的数据低于5K我使用了SideInput,而数据高于50K的Co-GroupBy用于连接,但性能没有达到标准。

apache google-cloud-platform google-cloud-dataflow apache-beam
1个回答
3
投票

看起来你看到类似于this问题的东西,目前没有针对修复的ETA。 Beam SQL本身目前没有进行大量的JOIN优化,它根据接收的输入类型选择最合适的方法(侧输入,CoGBK),但这就是它,否则你无法控制它。

在不知道具体设置的情况下很难确定,例如你有什么样的数据源,或者你是如何确保使用侧输入与CoGBK,或者你使用的是什么样的跑步者,或者你期望的性能与你实际观察到的是什么。

相关链接,如果您需要更多详细信息:

© www.soinside.com 2019 - 2024. All rights reserved.