You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@asterixdb.apache.org by Taewoo Kim <wa...@gmail.com> on 2016/03/08 07:42:37 UTC

Left-Outer-Unnest-Map operator VS Unnest-Map operator

Hello All,

I just want to share one information. We now have Left-Outer-Unnest-Map
(LOUM) operator. The difference between LOUM and Unnest-Map (UM) operator
is that LOUM is used to represent left-outer semantics of the
left-outer-join. That is, LOUM basically propagates all input variables
(from the outer branch). It also generates null values for non-match tuples
in the inner branch. Unlike this, UM does not propagate input variables by
default.

So, when a left-outer-join is transformed as an index-nested-loop-join,
LOUM operator will be placed in the inner branch by
IntroduceJoinAccessMethodRule and propagates all input variables from the
outer branch. For each tuples from the outer branch, it conducts
index-search and generates null values if there is no result from that
index-search.

So, during a logical plan optimization, if you see the LOUM operator, that
means that left outer join is transformed into an index-nested-loop join.

Re: Left-Outer-Unnest-Map operator VS Unnest-Map operator

Posted by abdullah alamoudi <ba...@gmail.com>.
Thanks Taewoo for sharing this.
It would be nice if everyone who introduces something new, let others know
about it.

Regards,
Abdullah.

On Tue, Mar 8, 2016 at 9:42 AM, Taewoo Kim <wa...@gmail.com> wrote:

> Hello All,
>
> I just want to share one information. We now have Left-Outer-Unnest-Map
> (LOUM) operator. The difference between LOUM and Unnest-Map (UM) operator
> is that LOUM is used to represent left-outer semantics of the
> left-outer-join. That is, LOUM basically propagates all input variables
> (from the outer branch). It also generates null values for non-match tuples
> in the inner branch. Unlike this, UM does not propagate input variables by
> default.
>
> So, when a left-outer-join is transformed as an index-nested-loop-join,
> LOUM operator will be placed in the inner branch by
> IntroduceJoinAccessMethodRule and propagates all input variables from the
> outer branch. For each tuples from the outer branch, it conducts
> index-search and generates null values if there is no result from that
> index-search.
>
> So, during a logical plan optimization, if you see the LOUM operator, that
> means that left outer join is transformed into an index-nested-loop join.
>