Uploaded image for project: 'Tajo'
  1. Tajo
  2. TAJO-1352

Improve the join order algorithm to consider missed cases of associative join operators

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 0.11.0
    • Component/s: Planner/Optimizer
    • Labels:
      None

      Description

      TAJO-1277 fixes a bug related to the associativity of join operators, but there are still some missed cases that join operators are associative. This work should include the cases described in the following links:

      1. JoinGraph.png
        54 kB
        Jihoon Son

        Issue Links

          Activity

          Hide
          jihoonson Jihoon Son added a comment -

          The requirements in this issue are as follows:

          • Basically, the join order is left-to-right.
          • Only the order of associative join types can be changed.
          • The associativity checking routine should be easily extendible.

          However, I found that it is hard to meet these requirements using our current JoinGraph implementation. This is because the lack of inherent join order scheme, inextensible associativity checking routine, and so on.

          So, I'd like to suggest a new join graph. Here are some brief descriptions of the graph.

          • It consists of JoinVertexes and JoinEdges.
          • JoinVertex types:
            • RelationVertex contains a single relation.
            • AssociativeGroupVertex contains a set of JoinVertexes, and all possible JoinEdges between them.
            • NonAssociativeGroupVertex contains a left JoinVertex, a right JoinVertex, and a JoinEdge between them.
          • A JoinEdge contains the join type, a left vertex, a right vertex, and a set of join conditions.

          The attached figure is an example graph of the following query:

          default> select * from c1 left outer join n1 on ... inner join c2 on ... inner join c3 on ... right outer join n2 on ...
          

          For your convenience, LOJ, ROJ, and IJ are shorts for left outer join, right outer join, and inner join, respectively.

          Show
          jihoonson Jihoon Son added a comment - The requirements in this issue are as follows: Basically, the join order is left-to-right. Only the order of associative join types can be changed. The associativity checking routine should be easily extendible. However, I found that it is hard to meet these requirements using our current JoinGraph implementation. This is because the lack of inherent join order scheme, inextensible associativity checking routine, and so on. So, I'd like to suggest a new join graph. Here are some brief descriptions of the graph. It consists of JoinVertexes and JoinEdges . JoinVertex types: RelationVertex contains a single relation. AssociativeGroupVertex contains a set of JoinVertexes, and all possible JoinEdges between them. NonAssociativeGroupVertex contains a left JoinVertex, a right JoinVertex, and a JoinEdge between them. A JoinEdge contains the join type, a left vertex, a right vertex, and a set of join conditions. The attached figure is an example graph of the following query: default> select * from c1 left outer join n1 on ... inner join c2 on ... inner join c3 on ... right outer join n2 on ... For your convenience, LOJ, ROJ, and IJ are shorts for left outer join, right outer join, and inner join, respectively.
          Hide
          githubbot ASF GitHub Bot added a comment -

          GitHub user jihoonson opened a pull request:

          https://github.com/apache/tajo/pull/593

          TAJO-1352: Improve the join order algorithm to consider missed cases of associative join operators

          Main changes are found at the GreedyHeuristicJoinOrderAlgorithm class. The findBestOrder() function finds the best relation pair among remaining join candidates based on join commutativity and associativity.

          You can merge this pull request into a Git repository by running:

          $ git pull https://github.com/jihoonson/tajo-2 TAJO-1352_4

          Alternatively you can review and apply these changes as the patch at:

          https://github.com/apache/tajo/pull/593.patch

          To close this pull request, make a commit to your master/trunk branch
          with (at least) the following in the commit message:

          This closes #593


          commit b165abcd3bac5feb2cd26ae1cc4713c5f2596014
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-14T08:57:01Z

          TAJO-1352_3

          commit d6e22ae056cf695a92306e008a2d941ca372519f
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-15T02:49:53Z

          problems in join tree building

          commit 213c09ba79b800c57397c55f1d4f5b96519f7f50
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-15T04:30:54Z

          TAJO-1352_3

          commit 60d250dce16d11693c3a1b5a87cb04bb7102deb3
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-15T05:47:28Z

          TAJO-1352_3

          commit f8638cf981954a51a5feefbf5de2982dc7c07078
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-15T06:02:13Z

          TAJO-1352_3

          commit 9ec987711d969be423d4dfb8de9bc07adf3b4082
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-15T11:09:13Z

          Finished join order improvement

          commit d774b455b89cc2cbf38f1fd37c987e43bfc57072
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-16T11:37:15Z

          TAJO-1352_4

          commit f27cec3db9d1683fabe11dc0115306c92b06e500
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-16T14:59:51Z

          Merge branch 'TAJO-1352_4' of https://github.com/jihoonson/tajo-2 into TAJO-1352_4

          commit 140bc3de2faf227dd5cbd84d81c5368efa1fd587
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-16T15:10:22Z

          TAJO-1352_4

          commit 7112eb935fe749f0ad656d02a2ec2a8decad8e48
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-17T01:06:36Z

          Merge branch 'TAJO-1352_4' of https://github.com/jihoonson/tajo-2 into TAJO-1352_4

          commit 7ac215a283094356909ce3220eb8cf9d9b6af629
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-17T05:04:43Z

          TAJO-1352_4

          commit 5e4de3d2b735fd907f64a27e02c74873c54eb95d
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-17T08:10:22Z

          TAJO-1352_4

          commit 3dca1b763a4a3d4ac9bd9f4541754bef8628f5cf
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-18T01:36:08Z

          TAJO-1352_4

          commit 8ebf859c3f142d673fbb2b03109ca1d7b894b167
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-18T01:44:51Z

          TAJO-1352_4

          commit 393dd555e19c36a942b49e4f9ccf88fd1a3508ca
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-18T09:46:38Z

          TAJO-1352_4

          commit 8bd027bec0cfe30379a71c914ba292d2766a7afc
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-18T12:21:13Z

          TAJO-1352_4

          commit 8dce54401006d70b9207cc5fd5823f92fc004b36
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-18T15:24:57Z

          Must resolve broadcast join bugs

          commit dcc6e8ac7adae598062386c30a387cf87954fa1e
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-18T16:21:20Z

          TAJO-1352_4

          commit f7d6c6b3db91ef36609e362941ef84e43b9e1144
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-18T17:25:57Z

          Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352_4

          commit 91b6551ee538dbd5f8de3f68434e5fbfa73bb5c4
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-19T02:32:05Z

          TAJO-1352_4

          commit 3cb707187136c28da2c2406ccbb3ad9f76735043
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-19T12:16:37Z

          TAJO-1352_4

          commit 1cef1668e2915f67b2fab919e38c20b96e3b63ac
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-20T05:43:40Z

          Fix JoinBroadcast test

          commit 7470270abcae4e678a24b4a7b2705ae96a831264
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-20T06:02:44Z

          Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352_4

          Conflicts:
          tajo-plan/src/main/java/org/apache/tajo/plan/expr/RowConstantEval.java
          tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java

          commit 38fb013fb530720dda03182f009f9cf3a0d53ea0
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-20T10:07:28Z

          TAJO-1352_4

          commit 321450872ad25bd2b3352e411dc03e21e3bd3f67
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-21T01:24:14Z

          TAJO-1352_4

          commit 4439a6fbc9def860494d4130e7024d15452df7c8
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-21T04:27:23Z

          TAJO-1352_4

          commit f42b4cebc1ebb2bf4aedb84fb7941673ed04004a
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-22T14:51:28Z

          Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352_4

          commit f626a93f2a89b45f12e2d0ec13a4c4e3c960d03c
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-23T03:07:03Z

          Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352_4

          commit bb27e0fceb8702eb7218ecdb01f57a8ec5927397
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-25T01:30:21Z

          Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352_4

          commit 34515d995d15be6350e5a15da39fe95f2d4ce5f8
          Author: Jihoon Son <jihoonson@apache.org>
          Date: 2015-03-26T06:38:23Z

          Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352_4


          Show
          githubbot ASF GitHub Bot added a comment - GitHub user jihoonson opened a pull request: https://github.com/apache/tajo/pull/593 TAJO-1352 : Improve the join order algorithm to consider missed cases of associative join operators Main changes are found at the GreedyHeuristicJoinOrderAlgorithm class. The findBestOrder() function finds the best relation pair among remaining join candidates based on join commutativity and associativity. You can merge this pull request into a Git repository by running: $ git pull https://github.com/jihoonson/tajo-2 TAJO-1352 _4 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/tajo/pull/593.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #593 commit b165abcd3bac5feb2cd26ae1cc4713c5f2596014 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-14T08:57:01Z TAJO-1352 _3 commit d6e22ae056cf695a92306e008a2d941ca372519f Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-15T02:49:53Z problems in join tree building commit 213c09ba79b800c57397c55f1d4f5b96519f7f50 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-15T04:30:54Z TAJO-1352 _3 commit 60d250dce16d11693c3a1b5a87cb04bb7102deb3 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-15T05:47:28Z TAJO-1352 _3 commit f8638cf981954a51a5feefbf5de2982dc7c07078 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-15T06:02:13Z TAJO-1352 _3 commit 9ec987711d969be423d4dfb8de9bc07adf3b4082 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-15T11:09:13Z Finished join order improvement commit d774b455b89cc2cbf38f1fd37c987e43bfc57072 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-16T11:37:15Z TAJO-1352 _4 commit f27cec3db9d1683fabe11dc0115306c92b06e500 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-16T14:59:51Z Merge branch ' TAJO-1352 _4' of https://github.com/jihoonson/tajo-2 into TAJO-1352 _4 commit 140bc3de2faf227dd5cbd84d81c5368efa1fd587 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-16T15:10:22Z TAJO-1352 _4 commit 7112eb935fe749f0ad656d02a2ec2a8decad8e48 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-17T01:06:36Z Merge branch ' TAJO-1352 _4' of https://github.com/jihoonson/tajo-2 into TAJO-1352 _4 commit 7ac215a283094356909ce3220eb8cf9d9b6af629 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-17T05:04:43Z TAJO-1352 _4 commit 5e4de3d2b735fd907f64a27e02c74873c54eb95d Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-17T08:10:22Z TAJO-1352 _4 commit 3dca1b763a4a3d4ac9bd9f4541754bef8628f5cf Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-18T01:36:08Z TAJO-1352 _4 commit 8ebf859c3f142d673fbb2b03109ca1d7b894b167 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-18T01:44:51Z TAJO-1352 _4 commit 393dd555e19c36a942b49e4f9ccf88fd1a3508ca Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-18T09:46:38Z TAJO-1352 _4 commit 8bd027bec0cfe30379a71c914ba292d2766a7afc Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-18T12:21:13Z TAJO-1352 _4 commit 8dce54401006d70b9207cc5fd5823f92fc004b36 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-18T15:24:57Z Must resolve broadcast join bugs commit dcc6e8ac7adae598062386c30a387cf87954fa1e Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-18T16:21:20Z TAJO-1352 _4 commit f7d6c6b3db91ef36609e362941ef84e43b9e1144 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-18T17:25:57Z Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352 _4 commit 91b6551ee538dbd5f8de3f68434e5fbfa73bb5c4 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-19T02:32:05Z TAJO-1352 _4 commit 3cb707187136c28da2c2406ccbb3ad9f76735043 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-19T12:16:37Z TAJO-1352 _4 commit 1cef1668e2915f67b2fab919e38c20b96e3b63ac Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-20T05:43:40Z Fix JoinBroadcast test commit 7470270abcae4e678a24b4a7b2705ae96a831264 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-20T06:02:44Z Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352 _4 Conflicts: tajo-plan/src/main/java/org/apache/tajo/plan/expr/RowConstantEval.java tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java commit 38fb013fb530720dda03182f009f9cf3a0d53ea0 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-20T10:07:28Z TAJO-1352 _4 commit 321450872ad25bd2b3352e411dc03e21e3bd3f67 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-21T01:24:14Z TAJO-1352 _4 commit 4439a6fbc9def860494d4130e7024d15452df7c8 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-21T04:27:23Z TAJO-1352 _4 commit f42b4cebc1ebb2bf4aedb84fb7941673ed04004a Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-22T14:51:28Z Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352 _4 commit f626a93f2a89b45f12e2d0ec13a4c4e3c960d03c Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-23T03:07:03Z Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352 _4 commit bb27e0fceb8702eb7218ecdb01f57a8ec5927397 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-25T01:30:21Z Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352 _4 commit 34515d995d15be6350e5a15da39fe95f2d4ce5f8 Author: Jihoon Son <jihoonson@apache.org> Date: 2015-03-26T06:38:23Z Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/tajo into TAJO-1352 _4
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-107016152

          I'll share a simple performance test result soon.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-107016152 I'll share a simple performance test result soon.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-111736855

          Here is the simple evaluation result.

              1. Query
                ```
                select
                count
                from
                lineitem left outer join orders
                on l_orderkey = o_orderkey
                left outer join partsupp
                on ps_suppkey = o_custkey
                left outer join customer
                on ps_suppkey = c_custkey
                left outer join part
                on p_partkey = c_nationkey
                ```
              1. Data
          • TPC-H of scale factor 100
              1. Cluster
          • One master and 3 workers
          • Each worker equips 4 cores, 8 GB memory, and 2 HDDs.
              1. Performance comparison
          • Elapsed time
          • Before patch: 25 mins, 23 sec
          • After patch: 19 mins, 59 sec
          • Performance improvement ratio: about 20%
              1. Query plan
                The query execution time is reduced due to the improved query plan as follows.
                1. Before patch
                  ```
                  -----------------------------
                  Query Block Graph
                  -----------------------------
                  -#ROOT
                  -----------------------------
                  Optimization Log:
                  [LogicalPlan]
                  > ProjectionNode is eliminated.
                  ROOT
                  > Non-optimized join order: ((((tpch100.lineitem ⟕ tpch100.orders) ⟕ tpch100.partsupp) ⟕ tpch100.customer) ⟕ tpch100.part) (cost: 1.0447965953264456E46)
                  > Optimized join order : ((((tpch100.lineitem ⟕ tpch100.orders) ⟕ tpch100.partsupp) ⟕ tpch100.customer) ⟕ tpch100.part) (cost: 1.0447965859707236E46)
                  -----------------------------

          GROUP_BY(10)()
          => exprs: (count())
          => target list: ?count (INT8)
          => out schema:

          {(1) ?count (INT8)}
          => in schema:{(0) }
          JOIN(15)(LEFT_OUTER)
          => Join Cond: tpch100.part.p_partkey (INT8) = tpch100.customer.c_nationkey (INT8)
          => target list:
          => out schema: {(0) }
          => in schema: {(2) tpch100.customer.c_nationkey (INT8), tpch100.part.p_partkey (INT8)}
          SCAN(7) on tpch100.part
          => target list: tpch100.part.p_partkey (INT8)
          => out schema: {(1) tpch100.part.p_partkey (INT8)}
          => in schema: {(9) tpch100.part.p_partkey (INT8), tpch100.part.p_name (TEXT), tpch100.part.p_mfgr (TEXT), tpch100.part.p_brand (TEXT), tpch100.part.p_type (TEXT), tpch100.part.p_size (INT4), tpch100.part.p_container (TEXT), tpch100.part.p_retailprice (FLOAT8), tpch100.part.p_comment (TEXT)}
          JOIN(14)(LEFT_OUTER)
          => Join Cond: tpch100.partsupp.ps_suppkey (INT8) = tpch100.customer.c_custkey (INT8)
          => target list: tpch100.customer.c_nationkey (INT8)
          => out schema: {(1) tpch100.customer.c_nationkey (INT8)}
          => in schema: {(3) tpch100.partsupp.ps_suppkey (INT8), tpch100.customer.c_nationkey (INT8), tpch100.customer.c_custkey (INT8)}
          SCAN(5) on tpch100.customer
          => target list: tpch100.customer.c_nationkey (INT8), tpch100.customer.c_custkey (INT8)
          => out schema: {(2) tpch100.customer.c_nationkey (INT8), tpch100.customer.c_custkey (INT8)}
          => in schema: {(8) tpch100.customer.c_custkey (INT8), tpch100.customer.c_name (TEXT), tpch100.customer.c_address (TEXT), tpch100.customer.c_nationkey (INT8), tpch100.customer.c_phone (TEXT), tpch100.customer.c_acctbal (FLOAT8), tpch100.customer.c_mktsegment (TEXT), tpch100.customer.c_comment (TEXT)}
          JOIN(13)(LEFT_OUTER)
          => Join Cond: tpch100.partsupp.ps_suppkey (INT8) = tpch100.orders.o_custkey (INT8)
          => target list: tpch100.partsupp.ps_suppkey (INT8)
          => out schema: {(1) tpch100.partsupp.ps_suppkey (INT8)}
          => in schema: {(2) tpch100.orders.o_custkey (INT8), tpch100.partsupp.ps_suppkey (INT8)}
          SCAN(3) on tpch100.partsupp
          => target list: tpch100.partsupp.ps_suppkey (INT8)
          => out schema: {(1) tpch100.partsupp.ps_suppkey (INT8)}
          => in schema: {(5) tpch100.partsupp.ps_partkey (INT8), tpch100.partsupp.ps_suppkey (INT8), tpch100.partsupp.ps_availqty (INT4), tpch100.partsupp.ps_supplycost (FLOAT8), tpch100.partsupp.ps_comment (TEXT)}
          JOIN(12)(LEFT_OUTER)
          => Join Cond: tpch100.lineitem.l_orderkey (INT8) = tpch100.orders.o_orderkey (INT8)
          => target list: tpch100.orders.o_custkey (INT8)
          => out schema: {(1) tpch100.orders.o_custkey (INT8)}
          => in schema: {(3) tpch100.lineitem.l_orderkey (INT8), tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderkey (INT8)}
          SCAN(1) on tpch100.orders
          => target list: tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderkey (INT8)
          => out schema: {(2) tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderkey (INT8)}
          => in schema: {(9) tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderstatus (TEXT), tpch100.orders.o_totalprice (FLOAT8), tpch100.orders.o_orderdate (DATE), tpch100.orders.o_orderpriority (TEXT), tpch100.orders.o_clerk (TEXT), tpch100.orders.o_shippriority (INT4), tpch100.orders.o_comment (TEXT)}
          SCAN(0) on tpch100.lineitem
          => target list: tpch100.lineitem.l_orderkey (INT8)
          => out schema: {(1) tpch100.lineitem.l_orderkey (INT8)}
          => in schema: {(16) tpch100.lineitem.l_orderkey (INT8), tpch100.lineitem.l_partkey (INT8), tpch100.lineitem.l_suppkey (INT8), tpch100.lineitem.l_linenumber (INT8), tpch100.lineitem.l_quantity (FLOAT8), tpch100.lineitem.l_extendedprice (FLOAT8), tpch100.lineitem.l_discount (FLOAT8), tpch100.lineitem.l_tax (FLOAT8), tpch100.lineitem.l_returnflag (TEXT), tpch100.lineitem.l_linestatus (TEXT), tpch100.lineitem.l_shipdate (DATE), tpch100.lineitem.l_commitdate (DATE), tpch100.lineitem.l_receiptdate (DATE), tpch100.lineitem.l_shipinstruct (TEXT), tpch100.lineitem.l_shipmode (TEXT), tpch100.lineitem.l_comment (TEXT)}
          ```

          #### After patch
          ```
          -----------------------------
          Query Block Graph
          -----------------------------
          |-#ROOT
          -----------------------------
          Optimization Log:
          [LogicalPlan]
          > ProjectionNode is eliminated.
          ROOT
          > Non-optimized join order: ((((tpch100.lineitem ⟕ tpch100.orders) ⟕ tpch100.partsupp) ⟕ tpch100.customer) ⟕ tpch100.part) (cost: 7.933924122078524E46)
          > Optimized join order : ((tpch100.lineitem ⟕ (tpch100.orders ⟕ tpch100.partsupp)) ⟕ (tpch100.customer ⟕ tpch100.part)) (cost: 4.016549062824562E47)
          -----------------------------

          GROUP_BY(10)()
          => exprs: (count())
          => target list: ?count (INT8)
          => out schema:{(1) ?count (INT8)}

          => in schema:

          {(0) }
          JOIN(15)(LEFT_OUTER)
          => Join Cond: tpch100.partsupp.ps_suppkey (INT8) = tpch100.customer.c_custkey (INT8)
          => target list:
          => out schema: {(0) }

          => in schema:

          {(2) tpch100.partsupp.ps_suppkey (INT8), tpch100.customer.c_custkey (INT8)}

          JOIN(14)(LEFT_OUTER)
          => Join Cond: tpch100.part.p_partkey (INT8) = tpch100.customer.c_nationkey (INT8)
          => target list: tpch100.customer.c_custkey (INT8)
          => out schema:

          {(1) tpch100.customer.c_custkey (INT8)}

          => in schema:

          {(3) tpch100.customer.c_custkey (INT8), tpch100.customer.c_nationkey (INT8), tpch100.part.p_partkey (INT8)}

          SCAN(7) on tpch100.part
          => target list: tpch100.part.p_partkey (INT8)
          => out schema:

          {(1) tpch100.part.p_partkey (INT8)}

          => in schema:

          {(9) tpch100.part.p_partkey (INT8), tpch100.part.p_name (TEXT), tpch100.part.p_mfgr (TEXT), tpch100.part.p_brand (TEXT), tpch100.part.p_type (TEXT), tpch100.part.p_size (INT4), tpch100.part.p_container (TEXT), tpch100.part.p_retailprice (FLOAT8), tpch100.part.p_comment (TEXT)}

          SCAN(5) on tpch100.customer
          => target list: tpch100.customer.c_custkey (INT8), tpch100.customer.c_nationkey (INT8)
          => out schema:

          {(2) tpch100.customer.c_custkey (INT8), tpch100.customer.c_nationkey (INT8)}

          => in schema:

          {(8) tpch100.customer.c_custkey (INT8), tpch100.customer.c_name (TEXT), tpch100.customer.c_address (TEXT), tpch100.customer.c_nationkey (INT8), tpch100.customer.c_phone (TEXT), tpch100.customer.c_acctbal (FLOAT8), tpch100.customer.c_mktsegment (TEXT), tpch100.customer.c_comment (TEXT)}

          JOIN(13)(LEFT_OUTER)
          => Join Cond: tpch100.lineitem.l_orderkey (INT8) = tpch100.orders.o_orderkey (INT8)
          => target list: tpch100.partsupp.ps_suppkey (INT8)
          => out schema:

          {(1) tpch100.partsupp.ps_suppkey (INT8)}
          => in schema: {(3) tpch100.lineitem.l_orderkey (INT8), tpch100.partsupp.ps_suppkey (INT8), tpch100.orders.o_orderkey (INT8)}
          JOIN(12)(LEFT_OUTER)
          => Join Cond: tpch100.partsupp.ps_suppkey (INT8) = tpch100.orders.o_custkey (INT8)
          => target list: tpch100.partsupp.ps_suppkey (INT8), tpch100.orders.o_orderkey (INT8)
          => out schema: {(2) tpch100.partsupp.ps_suppkey (INT8), tpch100.orders.o_orderkey (INT8)}
          => in schema: {(3) tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8), tpch100.partsupp.ps_suppkey (INT8)}
          SCAN(3) on tpch100.partsupp
          => target list: tpch100.partsupp.ps_suppkey (INT8)
          => out schema: {(1) tpch100.partsupp.ps_suppkey (INT8)}

          => in schema:

          {(5) tpch100.partsupp.ps_partkey (INT8), tpch100.partsupp.ps_suppkey (INT8), tpch100.partsupp.ps_availqty (INT4), tpch100.partsupp.ps_supplycost (FLOAT8), tpch100.partsupp.ps_comment (TEXT)}

          SCAN(1) on tpch100.orders
          => target list: tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8)
          => out schema:

          {(2) tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8)}

          => in schema:

          {(9) tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderstatus (TEXT), tpch100.orders.o_totalprice (FLOAT8), tpch100.orders.o_orderdate (DATE), tpch100.orders.o_orderpriority (TEXT), tpch100.orders.o_clerk (TEXT), tpch100.orders.o_shippriority (INT4), tpch100.orders.o_comment (TEXT)}

          SCAN(0) on tpch100.lineitem
          => target list: tpch100.lineitem.l_orderkey (INT8)
          => out schema:

          {(1) tpch100.lineitem.l_orderkey (INT8)}

          => in schema:

          {(16) tpch100.lineitem.l_orderkey (INT8), tpch100.lineitem.l_partkey (INT8), tpch100.lineitem.l_suppkey (INT8), tpch100.lineitem.l_linenumber (INT8), tpch100.lineitem.l_quantity (FLOAT8), tpch100.lineitem.l_extendedprice (FLOAT8), tpch100.lineitem.l_discount (FLOAT8), tpch100.lineitem.l_tax (FLOAT8), tpch100.lineitem.l_returnflag (TEXT), tpch100.lineitem.l_linestatus (TEXT), tpch100.lineitem.l_shipdate (DATE), tpch100.lineitem.l_commitdate (DATE), tpch100.lineitem.l_receiptdate (DATE), tpch100.lineitem.l_shipinstruct (TEXT), tpch100.lineitem.l_shipmode (TEXT), tpch100.lineitem.l_comment (TEXT)}

          ```

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-111736855 Here is the simple evaluation result. Query ``` select count from lineitem left outer join orders on l_orderkey = o_orderkey left outer join partsupp on ps_suppkey = o_custkey left outer join customer on ps_suppkey = c_custkey left outer join part on p_partkey = c_nationkey ``` Data TPC-H of scale factor 100 Cluster One master and 3 workers Each worker equips 4 cores, 8 GB memory, and 2 HDDs. Performance comparison Elapsed time Before patch: 25 mins, 23 sec After patch: 19 mins, 59 sec Performance improvement ratio: about 20% Query plan The query execution time is reduced due to the improved query plan as follows. Before patch ``` ----------------------------- Query Block Graph ----------------------------- -#ROOT ----------------------------- Optimization Log: [LogicalPlan] > ProjectionNode is eliminated. ROOT > Non-optimized join order: ((((tpch100.lineitem ⟕ tpch100.orders) ⟕ tpch100.partsupp) ⟕ tpch100.customer) ⟕ tpch100.part) (cost: 1.0447965953264456E46) > Optimized join order : ((((tpch100.lineitem ⟕ tpch100.orders) ⟕ tpch100.partsupp) ⟕ tpch100.customer) ⟕ tpch100.part) (cost: 1.0447965859707236E46) ----------------------------- GROUP_BY(10)() => exprs: (count()) => target list: ?count (INT8) => out schema: {(1) ?count (INT8)} => in schema:{(0) } JOIN(15)(LEFT_OUTER) => Join Cond: tpch100.part.p_partkey (INT8) = tpch100.customer.c_nationkey (INT8) => target list: => out schema: {(0) } => in schema: {(2) tpch100.customer.c_nationkey (INT8), tpch100.part.p_partkey (INT8)} SCAN(7) on tpch100.part => target list: tpch100.part.p_partkey (INT8) => out schema: {(1) tpch100.part.p_partkey (INT8)} => in schema: {(9) tpch100.part.p_partkey (INT8), tpch100.part.p_name (TEXT), tpch100.part.p_mfgr (TEXT), tpch100.part.p_brand (TEXT), tpch100.part.p_type (TEXT), tpch100.part.p_size (INT4), tpch100.part.p_container (TEXT), tpch100.part.p_retailprice (FLOAT8), tpch100.part.p_comment (TEXT)} JOIN(14)(LEFT_OUTER) => Join Cond: tpch100.partsupp.ps_suppkey (INT8) = tpch100.customer.c_custkey (INT8) => target list: tpch100.customer.c_nationkey (INT8) => out schema: {(1) tpch100.customer.c_nationkey (INT8)} => in schema: {(3) tpch100.partsupp.ps_suppkey (INT8), tpch100.customer.c_nationkey (INT8), tpch100.customer.c_custkey (INT8)} SCAN(5) on tpch100.customer => target list: tpch100.customer.c_nationkey (INT8), tpch100.customer.c_custkey (INT8) => out schema: {(2) tpch100.customer.c_nationkey (INT8), tpch100.customer.c_custkey (INT8)} => in schema: {(8) tpch100.customer.c_custkey (INT8), tpch100.customer.c_name (TEXT), tpch100.customer.c_address (TEXT), tpch100.customer.c_nationkey (INT8), tpch100.customer.c_phone (TEXT), tpch100.customer.c_acctbal (FLOAT8), tpch100.customer.c_mktsegment (TEXT), tpch100.customer.c_comment (TEXT)} JOIN(13)(LEFT_OUTER) => Join Cond: tpch100.partsupp.ps_suppkey (INT8) = tpch100.orders.o_custkey (INT8) => target list: tpch100.partsupp.ps_suppkey (INT8) => out schema: {(1) tpch100.partsupp.ps_suppkey (INT8)} => in schema: {(2) tpch100.orders.o_custkey (INT8), tpch100.partsupp.ps_suppkey (INT8)} SCAN(3) on tpch100.partsupp => target list: tpch100.partsupp.ps_suppkey (INT8) => out schema: {(1) tpch100.partsupp.ps_suppkey (INT8)} => in schema: {(5) tpch100.partsupp.ps_partkey (INT8), tpch100.partsupp.ps_suppkey (INT8), tpch100.partsupp.ps_availqty (INT4), tpch100.partsupp.ps_supplycost (FLOAT8), tpch100.partsupp.ps_comment (TEXT)} JOIN(12)(LEFT_OUTER) => Join Cond: tpch100.lineitem.l_orderkey (INT8) = tpch100.orders.o_orderkey (INT8) => target list: tpch100.orders.o_custkey (INT8) => out schema: {(1) tpch100.orders.o_custkey (INT8)} => in schema: {(3) tpch100.lineitem.l_orderkey (INT8), tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderkey (INT8)} SCAN(1) on tpch100.orders => target list: tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderkey (INT8) => out schema: {(2) tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderkey (INT8)} => in schema: {(9) tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderstatus (TEXT), tpch100.orders.o_totalprice (FLOAT8), tpch100.orders.o_orderdate (DATE), tpch100.orders.o_orderpriority (TEXT), tpch100.orders.o_clerk (TEXT), tpch100.orders.o_shippriority (INT4), tpch100.orders.o_comment (TEXT)} SCAN(0) on tpch100.lineitem => target list: tpch100.lineitem.l_orderkey (INT8) => out schema: {(1) tpch100.lineitem.l_orderkey (INT8)} => in schema: {(16) tpch100.lineitem.l_orderkey (INT8), tpch100.lineitem.l_partkey (INT8), tpch100.lineitem.l_suppkey (INT8), tpch100.lineitem.l_linenumber (INT8), tpch100.lineitem.l_quantity (FLOAT8), tpch100.lineitem.l_extendedprice (FLOAT8), tpch100.lineitem.l_discount (FLOAT8), tpch100.lineitem.l_tax (FLOAT8), tpch100.lineitem.l_returnflag (TEXT), tpch100.lineitem.l_linestatus (TEXT), tpch100.lineitem.l_shipdate (DATE), tpch100.lineitem.l_commitdate (DATE), tpch100.lineitem.l_receiptdate (DATE), tpch100.lineitem.l_shipinstruct (TEXT), tpch100.lineitem.l_shipmode (TEXT), tpch100.lineitem.l_comment (TEXT)} ``` #### After patch ``` ----------------------------- Query Block Graph ----------------------------- |-#ROOT ----------------------------- Optimization Log: [LogicalPlan] > ProjectionNode is eliminated. ROOT > Non-optimized join order: ((((tpch100.lineitem ⟕ tpch100.orders) ⟕ tpch100.partsupp) ⟕ tpch100.customer) ⟕ tpch100.part) (cost: 7.933924122078524E46) > Optimized join order : ((tpch100.lineitem ⟕ (tpch100.orders ⟕ tpch100.partsupp)) ⟕ (tpch100.customer ⟕ tpch100.part)) (cost: 4.016549062824562E47) ----------------------------- GROUP_BY(10)() => exprs: (count()) => target list: ?count (INT8) => out schema:{(1) ?count (INT8)} => in schema: {(0) } JOIN(15)(LEFT_OUTER) => Join Cond: tpch100.partsupp.ps_suppkey (INT8) = tpch100.customer.c_custkey (INT8) => target list: => out schema: {(0) } => in schema: {(2) tpch100.partsupp.ps_suppkey (INT8), tpch100.customer.c_custkey (INT8)} JOIN(14)(LEFT_OUTER) => Join Cond: tpch100.part.p_partkey (INT8) = tpch100.customer.c_nationkey (INT8) => target list: tpch100.customer.c_custkey (INT8) => out schema: {(1) tpch100.customer.c_custkey (INT8)} => in schema: {(3) tpch100.customer.c_custkey (INT8), tpch100.customer.c_nationkey (INT8), tpch100.part.p_partkey (INT8)} SCAN(7) on tpch100.part => target list: tpch100.part.p_partkey (INT8) => out schema: {(1) tpch100.part.p_partkey (INT8)} => in schema: {(9) tpch100.part.p_partkey (INT8), tpch100.part.p_name (TEXT), tpch100.part.p_mfgr (TEXT), tpch100.part.p_brand (TEXT), tpch100.part.p_type (TEXT), tpch100.part.p_size (INT4), tpch100.part.p_container (TEXT), tpch100.part.p_retailprice (FLOAT8), tpch100.part.p_comment (TEXT)} SCAN(5) on tpch100.customer => target list: tpch100.customer.c_custkey (INT8), tpch100.customer.c_nationkey (INT8) => out schema: {(2) tpch100.customer.c_custkey (INT8), tpch100.customer.c_nationkey (INT8)} => in schema: {(8) tpch100.customer.c_custkey (INT8), tpch100.customer.c_name (TEXT), tpch100.customer.c_address (TEXT), tpch100.customer.c_nationkey (INT8), tpch100.customer.c_phone (TEXT), tpch100.customer.c_acctbal (FLOAT8), tpch100.customer.c_mktsegment (TEXT), tpch100.customer.c_comment (TEXT)} JOIN(13)(LEFT_OUTER) => Join Cond: tpch100.lineitem.l_orderkey (INT8) = tpch100.orders.o_orderkey (INT8) => target list: tpch100.partsupp.ps_suppkey (INT8) => out schema: {(1) tpch100.partsupp.ps_suppkey (INT8)} => in schema: {(3) tpch100.lineitem.l_orderkey (INT8), tpch100.partsupp.ps_suppkey (INT8), tpch100.orders.o_orderkey (INT8)} JOIN(12)(LEFT_OUTER) => Join Cond: tpch100.partsupp.ps_suppkey (INT8) = tpch100.orders.o_custkey (INT8) => target list: tpch100.partsupp.ps_suppkey (INT8), tpch100.orders.o_orderkey (INT8) => out schema: {(2) tpch100.partsupp.ps_suppkey (INT8), tpch100.orders.o_orderkey (INT8)} => in schema: {(3) tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8), tpch100.partsupp.ps_suppkey (INT8)} SCAN(3) on tpch100.partsupp => target list: tpch100.partsupp.ps_suppkey (INT8) => out schema: {(1) tpch100.partsupp.ps_suppkey (INT8)} => in schema: {(5) tpch100.partsupp.ps_partkey (INT8), tpch100.partsupp.ps_suppkey (INT8), tpch100.partsupp.ps_availqty (INT4), tpch100.partsupp.ps_supplycost (FLOAT8), tpch100.partsupp.ps_comment (TEXT)} SCAN(1) on tpch100.orders => target list: tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8) => out schema: {(2) tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8)} => in schema: {(9) tpch100.orders.o_orderkey (INT8), tpch100.orders.o_custkey (INT8), tpch100.orders.o_orderstatus (TEXT), tpch100.orders.o_totalprice (FLOAT8), tpch100.orders.o_orderdate (DATE), tpch100.orders.o_orderpriority (TEXT), tpch100.orders.o_clerk (TEXT), tpch100.orders.o_shippriority (INT4), tpch100.orders.o_comment (TEXT)} SCAN(0) on tpch100.lineitem => target list: tpch100.lineitem.l_orderkey (INT8) => out schema: {(1) tpch100.lineitem.l_orderkey (INT8)} => in schema: {(16) tpch100.lineitem.l_orderkey (INT8), tpch100.lineitem.l_partkey (INT8), tpch100.lineitem.l_suppkey (INT8), tpch100.lineitem.l_linenumber (INT8), tpch100.lineitem.l_quantity (FLOAT8), tpch100.lineitem.l_extendedprice (FLOAT8), tpch100.lineitem.l_discount (FLOAT8), tpch100.lineitem.l_tax (FLOAT8), tpch100.lineitem.l_returnflag (TEXT), tpch100.lineitem.l_linestatus (TEXT), tpch100.lineitem.l_shipdate (DATE), tpch100.lineitem.l_commitdate (DATE), tpch100.lineitem.l_receiptdate (DATE), tpch100.lineitem.l_shipinstruct (TEXT), tpch100.lineitem.l_shipmode (TEXT), tpch100.lineitem.l_comment (TEXT)} ```
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-111743931

          I expect that the performance will be more improved by simultaneously executing multiple execution blocks after our scheduler is implemented.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-111743931 I expect that the performance will be more improved by simultaneously executing multiple execution blocks after our scheduler is implemented.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user hyunsik commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/593#discussion_r34440152

          — Diff: tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java —
          @@ -161,4 +161,52 @@ public static String toDisplayString(Schema schema)

          { DDLBuilder.buildSchema(sb, schema); return sb.toString(); }

          +
          + public static int estimateSchemaSize(Schema schema) {
          — End diff –

          It seems to need some comment because it is hard to image its return value from the function name.
          Also, ```estimateRowSize``` rather than ```schema``` may be more intuitive.

          Show
          githubbot ASF GitHub Bot added a comment - Github user hyunsik commented on a diff in the pull request: https://github.com/apache/tajo/pull/593#discussion_r34440152 — Diff: tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java — @@ -161,4 +161,52 @@ public static String toDisplayString(Schema schema) { DDLBuilder.buildSchema(sb, schema); return sb.toString(); } + + public static int estimateSchemaSize(Schema schema) { — End diff – It seems to need some comment because it is hard to image its return value from the function name. Also, ```estimateRowSize``` rather than ```schema``` may be more intuitive.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user hyunsik commented on a diff in the pull request:

          https://github.com/apache/tajo/pull/593#discussion_r34441081

          — Diff: tajo-common/src/main/java/org/apache/tajo/util/Pair.java —
          @@ -24,11 +24,20 @@
          private T1 first;
          private T2 second;

          + public Pair() {
          — End diff –

          It is only used for JoinGraphContext::getCachedOrNewJoinEdge. It would be better if JoinGraphContext::getCachedOrNewJoinEdge creates a new instance for Pair instead of reusing a member variable.

          Show
          githubbot ASF GitHub Bot added a comment - Github user hyunsik commented on a diff in the pull request: https://github.com/apache/tajo/pull/593#discussion_r34441081 — Diff: tajo-common/src/main/java/org/apache/tajo/util/Pair.java — @@ -24,11 +24,20 @@ private T1 first; private T2 second; + public Pair() { — End diff – It is only used for JoinGraphContext::getCachedOrNewJoinEdge. It would be better if JoinGraphContext::getCachedOrNewJoinEdge creates a new instance for Pair instead of reusing a member variable.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user hyunsik commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-120859618

          Not all changes are shown in the diff in github due to lots of changes. So, I leave some comments here.

          • ```cachekey``` in ```JoinGraphContext``` should be changed to a local member variable. Its cache effect is trivial because the object lifecycle is very short.
          • the member variable LOG in GreedyHeuristicJoinOrderAlgorithm is added but is not used.
          • PlannerUtil::isSymmetricJoin includes the comment about commutative. But, the method name has been changed from isCommutativeJoin to isSymmetricJoin. As far as I know, commutative join is used in common for the exact meaning we know. But, symmetric join is not usual. Please see two links: symmetric join (https://goo.gl/d4uOO3) vs. commutative join (https://goo.gl/oFCgtM).

          I'm still reviewing the patch. I'll give more comments soon.

          Show
          githubbot ASF GitHub Bot added a comment - Github user hyunsik commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-120859618 Not all changes are shown in the diff in github due to lots of changes. So, I leave some comments here. ```cachekey``` in ```JoinGraphContext``` should be changed to a local member variable. Its cache effect is trivial because the object lifecycle is very short. the member variable LOG in GreedyHeuristicJoinOrderAlgorithm is added but is not used. PlannerUtil::isSymmetricJoin includes the comment about commutative. But, the method name has been changed from isCommutativeJoin to isSymmetricJoin. As far as I know, commutative join is used in common for the exact meaning we know. But, symmetric join is not usual. Please see two links: symmetric join ( https://goo.gl/d4uOO3 ) vs. commutative join ( https://goo.gl/oFCgtM ). I'm still reviewing the patch. I'll give more comments soon.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user hyunsik commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-121105576

          I'm leaving additional comments.

          • Nested if-condition branches in JoinedRelationsVertex::buildPlan for left-deep tree can be simplified. If you intend better code readability, it would be Ok.
          • isSymmetricJoinOnly in JoinGraph only seems to be affected by only the last addJoin() call. But, its name and isSymmetricJoinOnly() name seems that this join graph consists of only symmetric joins.
          • JoinGraph::addJoin cuts the cyclic if it find out the loop. It would be Ok in the current implementation. As a database researcher and aside from this patch, I have just a question. Arbitrary cyclic cuts like this can lose the better join opportunities. Is this singular position true? I'm just wondering. If so, should we find a join order from just a join graph even including loops?
          Show
          githubbot ASF GitHub Bot added a comment - Github user hyunsik commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-121105576 I'm leaving additional comments. Nested if-condition branches in JoinedRelationsVertex::buildPlan for left-deep tree can be simplified. If you intend better code readability, it would be Ok. isSymmetricJoinOnly in JoinGraph only seems to be affected by only the last addJoin() call. But, its name and isSymmetricJoinOnly() name seems that this join graph consists of only symmetric joins. JoinGraph::addJoin cuts the cyclic if it find out the loop. It would be Ok in the current implementation. As a database researcher and aside from this patch, I have just a question. Arbitrary cyclic cuts like this can lose the better join opportunities. Is this singular position true? I'm just wondering. If so, should we find a join order from just a join graph even including loops?
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user hyunsik commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-121105876

          Additional comments:

          • The javadoc in JoinOrderAlgorithm::FoundJoinOrder includes wrong parameter name. That is, joinGraph should be joinGraphContext.
          • Methods (especially public methods) in JoinOrderingUtil seem to need Javadoc because it may be hard to guess their exact purpose from their signature.
          Show
          githubbot ASF GitHub Bot added a comment - Github user hyunsik commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-121105876 Additional comments: The javadoc in JoinOrderAlgorithm::FoundJoinOrder includes wrong parameter name. That is, joinGraph should be joinGraphContext. Methods (especially public methods) in JoinOrderingUtil seem to need Javadoc because it may be hard to guess their exact purpose from their signature.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-121170531

          @hyunsik thanks for your review. I've reflected all your comments and added more comments to help your understanding.
          Regarding on the question about JoinGraph::addJoin, it seems that there are some misunderstandings. The JoinGraph::addJoin method just checks whether there is a cycle rather than physically cutting it. This is to maintain the ```root vertexes``` which the graph traverse is started from. In this patch, the root vertexes are identified if they don't have any incoming edges. However, in the presence of a cycle, every vertex has at least one incoming edge, so cannot be the root vertex. The if clause related to the cycle at JoinGraph.java:43 is to prevent such case.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-121170531 @hyunsik thanks for your review. I've reflected all your comments and added more comments to help your understanding. Regarding on the question about JoinGraph::addJoin, it seems that there are some misunderstandings. The JoinGraph::addJoin method just checks whether there is a cycle rather than physically cutting it. This is to maintain the ```root vertexes``` which the graph traverse is started from. In this patch, the root vertexes are identified if they don't have any incoming edges. However, in the presence of a cycle, every vertex has at least one incoming edge, so cannot be the root vertex. The if clause related to the cycle at JoinGraph.java:43 is to prevent such case.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user hyunsik commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-122240606

          Thank you for your work.

          I leave additional trivial comments.

          • LogicalPlanRewriteRule in LogicalOptimizer is not used.
          • handleRemainingFiltersIfNecessary needs a brief comment to explain its purpose.
          • JoinOrderingUtil includes several unused imports.
          • The multi line comments In 63 line in GreedyHeuristicAlgorithm.java should use ``//`` instead of ``/*``.
          • GreedyHeuristicAlgorithm::prepareGraphUpdate needs a brief comment to its purpose.

          The patch seems to be ready to be committed. After your answer, I'll finish the review.

          Show
          githubbot ASF GitHub Bot added a comment - Github user hyunsik commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-122240606 Thank you for your work. I leave additional trivial comments. LogicalPlanRewriteRule in LogicalOptimizer is not used. handleRemainingFiltersIfNecessary needs a brief comment to explain its purpose. JoinOrderingUtil includes several unused imports. The multi line comments In 63 line in GreedyHeuristicAlgorithm.java should use ``//`` instead of ``/*``. GreedyHeuristicAlgorithm::prepareGraphUpdate needs a brief comment to its purpose. The patch seems to be ready to be committed. After your answer, I'll finish the review.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-122244720

          Thank you for the detailed review.
          I've reflect all your comments.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-122244720 Thank you for the detailed review. I've reflect all your comments.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user jihoonson commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-122278094

          Test failures are fixed.

          Show
          githubbot ASF GitHub Bot added a comment - Github user jihoonson commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-122278094 Test failures are fixed.
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user hyunsik commented on the pull request:

          https://github.com/apache/tajo/pull/593#issuecomment-122716608

          +1 The latest patch looks good to me.

          Show
          githubbot ASF GitHub Bot added a comment - Github user hyunsik commented on the pull request: https://github.com/apache/tajo/pull/593#issuecomment-122716608 +1 The latest patch looks good to me.
          Hide
          jihoonson Jihoon Son added a comment -

          Committed to master.

          Show
          jihoonson Jihoon Son added a comment - Committed to master.
          Hide
          hudson Hudson added a comment -

          ABORTED: Integrated in Tajo-master-CODEGEN-build #392 (See https://builds.apache.org/job/Tajo-master-CODEGEN-build/392/)
          TAJO-1352: Improve the join order algorithm to consider missed cases of associative join operators. (jihoon) (jihoonson: rev bedce3aa0ef3a3d337e7c054c9db0e3af2e15cf4)

          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan
          • tajo-core/src/test/resources/results/TestUnionQuery/testUnionAll13.result
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash_NoBroadcast.plan
          • tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java
          • tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
          • tajo-core/src/test/resources/results/TestUnionQuery/testUnionAll12.result
          • tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/LogicalOptimizer.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.result
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan
          • tajo-core/src/test/tpch/part.tbl
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinOrderAlgorithm.java
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
          • CHANGES
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan
          • tajo-core/src/test/resources/results/TestUnionQuery/testUnion12.result
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestUnionQuery/testUnion13.result
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort_NoBroadcast.plan
          • tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
          • tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
          • tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan
          • tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestJoinQuery/testWhereClauseJoin6.result
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinOrderingUtil.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinSpec.java
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.result
          • tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java
          • tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinGraph.java
          • tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan
          • tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan
          • tajo-core/src/test/resources/results/TestSelectQuery/testExplainSelectPhysical.2.result
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/RelationVertex.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinEdge.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort_NoBroadcast.plan
          • tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinVertex.java
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash_NoBroadcast.plan
          • tajo-common/src/main/java/org/apache/tajo/util/Pair.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinedRelationsVertex.java
          • tajo-core/pom.xml
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinGraphContext.java
          Show
          hudson Hudson added a comment - ABORTED: Integrated in Tajo-master-CODEGEN-build #392 (See https://builds.apache.org/job/Tajo-master-CODEGEN-build/392/ ) TAJO-1352 : Improve the join order algorithm to consider missed cases of associative join operators. (jihoon) (jihoonson: rev bedce3aa0ef3a3d337e7c054c9db0e3af2e15cf4) tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan tajo-core/src/test/resources/results/TestUnionQuery/testUnionAll13.result tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash_NoBroadcast.plan tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan tajo-core/src/test/resources/results/TestUnionQuery/testUnionAll12.result tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan tajo-plan/src/main/java/org/apache/tajo/plan/LogicalOptimizer.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.result tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan tajo-core/src/test/tpch/part.tbl tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinOrderAlgorithm.java tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash_NoBroadcast.plan tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan CHANGES tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan tajo-core/src/test/resources/results/TestUnionQuery/testUnion12.result tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestUnionQuery/testUnion13.result tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort_NoBroadcast.plan tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestJoinQuery/testWhereClauseJoin6.result tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinOrderingUtil.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinSpec.java tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.result tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinGraph.java tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort_NoBroadcast.plan tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan tajo-core/src/test/resources/results/TestSelectQuery/testExplainSelectPhysical.2.result tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/RelationVertex.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinEdge.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort_NoBroadcast.plan tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinVertex.java tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash_NoBroadcast.plan tajo-common/src/main/java/org/apache/tajo/util/Pair.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinedRelationsVertex.java tajo-core/pom.xml tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinGraphContext.java
          Hide
          hudson Hudson added a comment -

          SUCCESS: Integrated in Tajo-master-build #752 (See https://builds.apache.org/job/Tajo-master-build/752/)
          TAJO-1352: Improve the join order algorithm to consider missed cases of associative join operators. (jihoon) (jihoonson: rev bedce3aa0ef3a3d337e7c054c9db0e3af2e15cf4)

          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinEdge.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java
          • tajo-plan/src/main/java/org/apache/tajo/plan/LogicalOptimizer.java
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.result
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestUnionQuery/testUnion13.result
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.result
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan
          • tajo-core/src/test/resources/results/TestUnionQuery/testUnion12.result
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash_NoBroadcast.plan
          • tajo-core/pom.xml
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Hash.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinGraph.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinOrderAlgorithm.java
          • tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinedRelationsVertex.java
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan
          • tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestJoinQuery/testWhereClauseJoin6.result
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/RelationVertex.java
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan
          • tajo-core/src/test/resources/results/TestUnionQuery/testUnionAll12.result
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan
          • tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql
          • tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort_NoBroadcast.plan
          • tajo-common/src/main/java/org/apache/tajo/util/Pair.java
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort.plan
          • tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java
          • tajo-core/src/test/resources/results/TestSelectQuery/testExplainSelectPhysical.2.result
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinVertex.java
          • tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan
          • CHANGES
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinOrderingUtil.java
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan
          • tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Sort.plan
          • tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinSpec.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan
          • tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan
          • tajo-core/src/test/resources/results/TestUnionQuery/testUnionAll13.result
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan
          • tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan
          • tajo-core/src/test/tpch/part.tbl
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan
          • tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinGraphContext.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort_NoBroadcast.plan
          • tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan
          • tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan
          • tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java
          • tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort_NoBroadcast.plan
          Show
          hudson Hudson added a comment - SUCCESS: Integrated in Tajo-master-build #752 (See https://builds.apache.org/job/Tajo-master-build/752/ ) TAJO-1352 : Improve the join order algorithm to consider missed cases of associative join operators. (jihoon) (jihoonson: rev bedce3aa0ef3a3d337e7c054c9db0e3af2e15cf4) tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinEdge.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/util/PlannerUtil.java tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash.plan tajo-plan/src/main/java/org/apache/tajo/plan/logical/ScanNode.java tajo-plan/src/main/java/org/apache/tajo/plan/LogicalOptimizer.java tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.3.result tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestUnionQuery/testUnion13.result tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.5.result tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort.plan tajo-core/src/test/resources/results/TestUnionQuery/testUnion12.result tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Hash.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash_NoBroadcast.plan tajo-core/pom.xml tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Hash.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestTPCH/testQ2FourJoins.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinGraph.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinOrderAlgorithm.java tajo-plan/src/main/java/org/apache/tajo/plan/LogicalPlanner.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinedRelationsVertex.java tajo-core/src/test/resources/results/TestMultipleJoinTypes/testComplexJoinsWithCaseWhen.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithEmptyTable1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoinPredicationCaseByCase2.1.Hash.plan tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin6.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestJoinQuery/testWhereClauseJoin6.result tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoin.2.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/RelationVertex.java tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Hash.plan tajo-core/src/test/resources/results/TestUnionQuery/testUnionAll12.result tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash.plan tajo-core/src/test/resources/results/TestMultipleJoinTypes/testInnerAndOuterWithEmpty.1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinAsterisk.Hash_NoBroadcast.plan tajo-core/src/test/resources/queries/TestInnerJoinWithSubQuery/testBroadcastSubquery2.sql tajo-core/src/test/java/org/apache/tajo/engine/query/TestOuterJoinQuery.java tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinWithEmptyTable.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinCoReferredEvals1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testOuterJoinAndCaseWhen1.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testInnerJoinAndCaseWhen.Sort_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/GreedyHeuristicJoinOrderAlgorithm.java tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testTPCHQ2Join.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testLeftOuterJoin3.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Sort_NoBroadcast.plan tajo-common/src/main/java/org/apache/tajo/util/Pair.java tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinOnMultipleDatabases.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinWithEmptyTable1.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Sort.plan tajo-core/src/test/java/org/apache/tajo/querymaster/TestTaskStatusUpdate.java tajo-core/src/test/resources/results/TestSelectQuery/testExplainSelectPhysical.2.result tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin2.Hash.plan tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinNode.java tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinVertex.java tajo-core/src/test/resources/results/TestTPCH/testTPCHQ5.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Sort.plan CHANGES tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinOrderingUtil.java tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual4.Sort.plan tajo-core/src/test/resources/results/TestOuterJoinWithSubQuery/testFullOuterJoinWithEmptyIntermediateData.1.Sort.plan tajo-catalog/tajo-catalog-common/src/main/java/org/apache/tajo/catalog/SchemaUtil.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/logical/JoinSpec.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin3.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery2.Hash.plan tajo-core/src/test/resources/queries/TestOuterJoinQuery/testLeftOuterJoin2.sql tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithAsterisk1.Hash.plan tajo-core/src/test/resources/results/TestUnionQuery/testUnionAll13.result tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinAndCaseWhen.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Hash.plan tajo-core/src/main/java/org/apache/tajo/master/exec/ExplainPlanPreprocessorForTest.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin1.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testBroadcastSubquery.Sort.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition2.Hash.plan tajo-core/src/test/tpch/part.tbl tajo-core/src/test/resources/results/TestInnerJoinQuery/testBroadcastTwoPartJoin.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Hash.plan tajo-core/src/test/java/org/apache/tajo/engine/query/TestInnerJoinQuery.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testCrossJoinWithThetaJoinConditionInWhere.Sort.plan tajo-plan/src/main/java/org/apache/tajo/plan/visitor/BasicLogicalPlanVisitor.java tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoin1.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition4.Hash_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition1.Hash.plan tajo-plan/src/main/java/org/apache/tajo/plan/joinorder/JoinGraphContext.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testWhereClauseJoin5.Hash.plan tajo-core/src/test/resources/results/TestInnerJoinQuery/testComplexJoinCondition3.Sort_NoBroadcast.plan tajo-core/src/test/resources/results/TestInnerJoinWithSubQuery/testJoinWithMultipleJoinQual3.Hash.plan tajo-core/src/test/resources/results/TestOuterJoinQuery/testFullOuterJoinPredicationCaseByCase1.1.Hash_NoBroadcast.plan tajo-plan/src/main/java/org/apache/tajo/plan/rewrite/rules/FilterPushDownRule.java tajo-core/src/test/resources/results/TestInnerJoinQuery/testJoinWithMultipleJoinQual1.Sort_NoBroadcast.plan
          Hide
          githubbot ASF GitHub Bot added a comment -

          Github user asfgit closed the pull request at:

          https://github.com/apache/tajo/pull/593

          Show
          githubbot ASF GitHub Bot added a comment - Github user asfgit closed the pull request at: https://github.com/apache/tajo/pull/593

            People

            • Assignee:
              jihoonson Jihoon Son
              Reporter:
              jihoonson Jihoon Son
            • Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved:

                Development