运行多个联接时,Beam SQL / Apache Beam变慢

时间:2018-08-14 04:46:08

标签: apache google-cloud-platform google-cloud-dataflow apache-beam

使用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进行联接,但性能未达到标准。

1 个答案:

答案 0 :(得分:3)

您似乎看到了与this问题类似的问题,该问题目前没有要解决的ETA。目前,Beam SQL本身并没有进行很多JOIN优化,它会根据接收到的输入类型选择最合适的方法(侧输入,CoGBK),但实际上,您无法控制它。

在不知道您的特定设置(例如您拥有什么类型的数据源,或者如何确保使用侧面输入与CoGBK,或者您使用什么运行器,或者期望的性能与实际观察的数据。

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