[英]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.