Hash Join是在进行多表连接时常用的方式之一。那如何在openLooKeng上构建并实现Hash Join?openLooKeng支持的Join类型有哪些?本期,社区小伙伴将分享[openLooKeng Hash Join 实现原理],从构建到使用,内容十分详细,希望对大家有帮助。
1 openLooKeng Join概述
为了更好的介绍join,我们创建两个非常简单的表t1和t2。执行的SQL语句如下:
create table t1(id bigint, value bigint);insert into t1 values(1, 11);insert into t1 values(2, 22);insert into t1 values(3, 33);insert into t1 values(4, 44);
create table t2(id bigint, value bigint);insert into t2 values(1, 111);insert into t2 values(2, 11);insert into t2 values(3, 333);insert into t2 values(4, 33);
openLooKeng的join有四类:
1) Lookup Join
大部分类型的Join都由Lookup Join完成。例如我们执行SQL语句如下:
select * from t1 inner join t2 on t1.value=t2.value;
其中,执行join所在stage涉及算子如下图所示:
▲ 图1-1 Lookup Join
完成Join的算子是HashBuilderOperator和LookupJoinOperator。而本文即将介绍Hash Join的原理,也就是这两个算子的实现原理。
2) Nested Loop Join
执行SQL语句“select * from t1 join t2 on t1.value > t2.value;”,join所在stage涉及算子如下图所示,其中完成Join的算子是NestedLoopBuilderOperator和NestedLoopJoinOperator。
▲图1-2 Nested Loop Join
3) Hash Semi Join
执行SQL语句“select * from t1 where value in (select value from t2);”,join所在stage涉及算子如下图所示,其中完成join的算子是SetBuilderOperator和HashSemiJoinOpe