繁体   English   中英

在 Hazelcast Jet 中执行左、右和内连接

[英]Perform Left, Right and Inner join in Hazelcast Jet

我正在研究 Hazelcast jet 应用程序,并且我尝试使用 Left、Right 或 Inner Join 加入两个 Sources,但我被困在下面:

这是我的代码:

BatchStage<Map<String,Object>> batch1= pipeline.readFrom(companyListBatchSource);
BatchStage<Map<String,Object>> batch2= pipeline.readFrom(employeeListBatchSource);

//Getting group by key
 BatchStageWithKey<Map<String,Object>, Object> jdbcGroupByKey = batch1.groupingKey(a -> a.getSource1().get(col1));
 BatchStageWithKey<Map<String,Object>, Object> fileGroupByKey = batch2.groupingKey(b -> b.getSource1().get(col2));

//trying to join but not sure what exactly is happening.
BatchStage<Entry<Object, Tuple2<List<Map<String,Object>>, List<Map<String,Object>>>>> d = jdbcGroupByKey.aggregate2(AggregateOperations.toList(),fileGroupByKey,AggregateOperations.toList());

从上面的代码如何实现BatchStage<Map<String,Object>>格式的数据? 我们如何在这里应用不同类型的连接?

您的Map<String, Object>表示单个项目,我们称其为整个类型E 所以你的输入是两个类型E流:公司和员工。

JOIN 的结果不是E类型,而是完全通用的Tuple2<List<E>, List<E>>

从这里开始,详细信息取决于连接每一侧的基数。 如果您在双方按公司分组,您应该有一对多关联和结果类型Tuple2<E, List<E>> 在这种情况下,将AggregateOperations.pickAny()用于公司流,这将导致单个项目并且连接的结果将作为Entry<Object, Tuple2<List<E>, List<E>>> 这相当于 LEFT OUTER JOIN。 如果您过滤掉员工列表为空的所有结果,您将获得一个内部连接: joined.filter(e -> !e.getValue().f1().isEmpty())

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM