在使用 Beam SQL 对 2 个表进行连接时,它可以正常工作,提供预期的性能,但随着我的连接表增加,性能变得最差。
下面是我的片段,它可以帮助您在 Beam SQL 中调试我的加入条件以获得更好的性能。
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 混合方法,其中表中的数据低于 5K 我采用 SideInput 并且数据高于 50K 使用 Co-GroupBy 进行连接,但性能不达标。