Github user sirpkt commented on the pull request:
https://github.com/apache/tajo/pull/384#issuecomment-86769740
+1
By the way, during the test, I found that there still exists some more room
to improve push filter down.
{code}
select
n1.n_nationkey,
n1.n_name,
n2.n_name
from nation n1, nation n2, nation n3 where (n1.n_nationkey in (1,2) or
n2.n_nationkey in (2)) and n2.n_nationkey = n3.n_nationkey and n1.n_nationkey =
n2.n_nationkey
order by n1.n_nationkey;
{code}
For above query, resulting optimized query plan is
{code}
PROJECTION(5)
=> Targets: default.n1.n_nationkey (INT4), default.n1.n_name (TEXT),
default.n2.n_name (TEXT)
=> out schema: {(3) default.n1.n_nationkey (INT4), default.n1.n_name
(TEXT), default.n2.n_name (TEXT)}
=> in schema: {(4) default.n1.n_nationkey (INT4), default.n1.n_name
(TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4)}
SORT(4)
=> Sort Keys: default.n1.n_nationkey (INT4) (asc)
SELECTION(3)
=> Search Cond: default.n1.n_nationkey (INT4) IN (1, 2) OR
default.n2.n_nationkey (INT4) IN (2)
JOIN(10)(INNER)
=> Join Cond: default.n2.n_nationkey (INT4) =
default.n3.n_nationkey (INT4)
=> target list: default.n1.n_nationkey (INT4), default.n1.n_name
(TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey (INT4)
=> out schema: {(4) default.n1.n_nationkey (INT4),
default.n1.n_name (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey
(INT4)}
=> in schema: {(5) default.n1.n_nationkey (INT4),
default.n1.n_name (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey
(INT4), default.n3.n_nationkey (INT4)}
SCAN(2) on default.nation as n3
=> target list: default.n3.n_nationkey (INT4)
=> out schema: {(1) default.n3.n_nationkey (INT4)}
=> in schema: {(4) default.n3.n_nationkey (INT4),
default.n3.n_name (TEXT), default.n3.n_regionkey (INT4), default.n3.n_comment
(TEXT)}
JOIN(9)(INNER)
=> Join Cond: default.n1.n_nationkey (INT4) =
default.n2.n_nationkey (INT4)
=> target list: default.n1.n_nationkey (INT4),
default.n1.n_name (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey
(INT4)
=> out schema: {(4) default.n1.n_nationkey (INT4),
default.n1.n_name (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey
(INT4)}
=> in schema: {(4) default.n1.n_nationkey (INT4),
default.n1.n_name (TEXT), default.n2.n_name (TEXT), default.n2.n_nationkey
(INT4)}
SCAN(1) on default.nation as n2
=> target list: default.n2.n_name (TEXT),
default.n2.n_nationkey (INT4)
=> out schema: {(2) default.n2.n_name (TEXT),
default.n2.n_nationkey (INT4)}
=> in schema: {(4) default.n2.n_nationkey (INT4),
default.n2.n_name (TEXT), default.n2.n_regionkey (INT4), default.n2.n_comment
(TEXT)}
SCAN(0) on default.nation as n1
=> target list: default.n1.n_nationkey (INT4),
default.n1.n_name (TEXT)
=> out schema: {(2) default.n1.n_nationkey (INT4),
default.n1.n_name (TEXT)}
=> in schema: {(4) default.n1.n_nationkey (INT4),
default.n1.n_name (TEXT), default.n1.n_regionkey (INT4), default.n1.n_comment
(TEXT)}
{code}
It would be more nice if we can do SELECTION(3) just after JOIN(9).
I think, After TAJO-1310 is resolved, we can further enhance filter push
down with new join filter feature.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---