0

在使用 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 进行连接,但性能不达标。

4

1 回答 1

3

您似乎看到了与问题类似的情况,目前没有 ETA 来修复。Beam SQL 本身目前并没有做很多 JOIN 优化,它会根据接收到的输入类型选择最合适的方法(side-input,CoGBK),但仅此而已,否则您无法控制它。

如果不知道您的具体设置,很难确定,例如您拥有什么样的数据源,或者您如何确保使用侧输入与 CoGBK,或者您使用什么运行器,或者您期望的性能与您的性能'实际上是在观察。

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

于 2018-08-14T16:46:54.380 回答