使用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上进行联接,因为表中的顺序联接
上一个输出负责下一个表Joins。 我曾尝试使用Co-GroupBy和SideInput混合方法,其中Table中的数据低于5K,我采用了SideInput,而数据高于50K,则使用Co-GroupBy进行联接,但性能未达到标准。
答案 0 :(得分:3)
您似乎看到了与this问题类似的问题,该问题目前没有要解决的ETA。目前,Beam SQL本身并没有进行很多JOIN优化,它会根据接收到的输入类型选择最合适的方法(侧输入,CoGBK),但实际上,您无法控制它。
在不知道您的特定设置(例如您拥有什么类型的数据源,或者如何确保使用侧面输入与CoGBK,或者您使用什么运行器,或者期望的性能与实际观察的数据。
相关链接,如果您需要更多详细信息: