[3/9] phoenix git commit: PHOENIX-3050 Handle DESC columns in child/parent join optimization
PHOENIX-3050 Handle DESC columns in child/parent join optimization Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/977699af Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/977699af Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/977699af Branch: refs/heads/4.x-HBase-0.98 Commit: 977699afe0d66f1434b8bc1c5a751767e563d6ce Parents: 92b57c7 Author: maryannxueAuthored: Wed Dec 6 12:07:16 2017 -0800 Committer: maryannxue Committed: Tue Mar 13 17:17:16 2018 -0700 -- .../phoenix/end2end/join/HashJoinMoreIT.java | 5 + .../org/apache/phoenix/compile/JoinCompiler.java | 19 +-- .../apache/phoenix/compile/QueryCompiler.java| 6 +++--- .../apache/phoenix/compile/WhereOptimizer.java | 5 - 4 files changed, 21 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/977699af/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java index 37ffd02..f09f1d3 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java @@ -895,6 +895,11 @@ public class HashJoinMoreIT extends ParallelStatsDisabledIT { + "FROM ( SELECT ACCOUNT_ID, BUCKET_ID, OBJECT_ID, MAX(OBJECT_VERSION) AS MAXVER " + " FROM test2961 GROUP BY ACCOUNT_ID, BUCKET_ID, OBJECT_ID) AS X " + " INNER JOIN test2961 AS OBJ ON X.ACCOUNT_ID = OBJ.ACCOUNT_ID AND X.BUCKET_ID = OBJ.BUCKET_ID AND X.OBJECT_ID = OBJ.OBJECT_ID AND X.MAXVER = OBJ.OBJECT_VERSION"; +rs = conn.createStatement().executeQuery("explain " + q); +String plan = QueryUtil.getExplainPlan(rs); +String dynamicFilter = "DYNAMIC SERVER FILTER BY (OBJ.ACCOUNT_ID, OBJ.BUCKET_ID, OBJ.OBJECT_ID, OBJ.OBJECT_VERSION) IN ((X.ACCOUNT_ID, X.BUCKET_ID, X.OBJECT_ID, X.MAXVER))"; +assertTrue("Expected '" + dynamicFilter + "' to be used for the query, but got:\n" + plan, +plan.contains(dynamicFilter)); rs = conn.createStatement().executeQuery(q); assertTrue(rs.next()); assertEquals("", rs.getString(4)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/977699af/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java index f9d8711..f3c4c24 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java @@ -108,6 +108,12 @@ import com.google.common.collect.Sets; public class JoinCompiler { +public enum Strategy { +HASH_BUILD_LEFT, +HASH_BUILD_RIGHT, +SORT_MERGE, +} + public enum ColumnRefType { JOINLOCAL, GENERAL, @@ -487,7 +493,7 @@ public class JoinCompiler { return dependencies; } -public Pair compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, boolean sortExpressions) throws SQLException { +public Pair
compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, Strategy strategy) throws SQLException { if (onConditions.isEmpty()) { return new Pair
( Collections. singletonList(LiteralExpression.newConstant(1)), @@ -503,15 +509,16 @@ public class JoinCompiler { rhsCompiler.reset(); Expression right = condition.getRHS().accept(rhsCompiler); PDataType toType = getCommonType(left.getDataType(), right.getDataType()); -if (left.getDataType() != toType || left.getSortOrder() == SortOrder.DESC) { -left = CoerceExpression.create(left, toType, SortOrder.ASC, left.getMaxLength()); +SortOrder toSortOrder = strategy == Strategy.SORT_MERGE ? SortOrder.ASC : (strategy == Strategy.HASH_BUILD_LEFT ? right.getSortOrder() : left.getSortOrder()); +if (left.getDataType() != toType || left.getSortOrder() != toSortOrder) { +left = CoerceExpression.create(left, toType, toSortOrder, left.getMaxLength()); } -
[1/9] phoenix git commit: PHOENIX-3050 Handle DESC columns in child/parent join optimization
Repository: phoenix Updated Branches: refs/heads/4.x-HBase-1.1 49f19ba68 -> c65c81a47 PHOENIX-3050 Handle DESC columns in child/parent join optimization Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/33ca96e6 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/33ca96e6 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/33ca96e6 Branch: refs/heads/4.x-HBase-1.1 Commit: 33ca96e656f3eac2802bcd5d3a5e1e4780455cf5 Parents: 49f19ba Author: maryannxueAuthored: Wed Dec 6 12:07:16 2017 -0800 Committer: maryannxue Committed: Tue Mar 13 16:44:33 2018 -0700 -- .../phoenix/end2end/join/HashJoinMoreIT.java | 5 + .../org/apache/phoenix/compile/JoinCompiler.java | 19 +-- .../apache/phoenix/compile/QueryCompiler.java| 6 +++--- .../apache/phoenix/compile/WhereOptimizer.java | 5 - 4 files changed, 21 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/33ca96e6/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java index 37ffd02..f09f1d3 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java @@ -895,6 +895,11 @@ public class HashJoinMoreIT extends ParallelStatsDisabledIT { + "FROM ( SELECT ACCOUNT_ID, BUCKET_ID, OBJECT_ID, MAX(OBJECT_VERSION) AS MAXVER " + " FROM test2961 GROUP BY ACCOUNT_ID, BUCKET_ID, OBJECT_ID) AS X " + " INNER JOIN test2961 AS OBJ ON X.ACCOUNT_ID = OBJ.ACCOUNT_ID AND X.BUCKET_ID = OBJ.BUCKET_ID AND X.OBJECT_ID = OBJ.OBJECT_ID AND X.MAXVER = OBJ.OBJECT_VERSION"; +rs = conn.createStatement().executeQuery("explain " + q); +String plan = QueryUtil.getExplainPlan(rs); +String dynamicFilter = "DYNAMIC SERVER FILTER BY (OBJ.ACCOUNT_ID, OBJ.BUCKET_ID, OBJ.OBJECT_ID, OBJ.OBJECT_VERSION) IN ((X.ACCOUNT_ID, X.BUCKET_ID, X.OBJECT_ID, X.MAXVER))"; +assertTrue("Expected '" + dynamicFilter + "' to be used for the query, but got:\n" + plan, +plan.contains(dynamicFilter)); rs = conn.createStatement().executeQuery(q); assertTrue(rs.next()); assertEquals("", rs.getString(4)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/33ca96e6/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java index f9d8711..f3c4c24 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java @@ -108,6 +108,12 @@ import com.google.common.collect.Sets; public class JoinCompiler { +public enum Strategy { +HASH_BUILD_LEFT, +HASH_BUILD_RIGHT, +SORT_MERGE, +} + public enum ColumnRefType { JOINLOCAL, GENERAL, @@ -487,7 +493,7 @@ public class JoinCompiler { return dependencies; } -public Pair compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, boolean sortExpressions) throws SQLException { +public Pair
compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, Strategy strategy) throws SQLException { if (onConditions.isEmpty()) { return new Pair
( Collections. singletonList(LiteralExpression.newConstant(1)), @@ -503,15 +509,16 @@ public class JoinCompiler { rhsCompiler.reset(); Expression right = condition.getRHS().accept(rhsCompiler); PDataType toType = getCommonType(left.getDataType(), right.getDataType()); -if (left.getDataType() != toType || left.getSortOrder() == SortOrder.DESC) { -left = CoerceExpression.create(left, toType, SortOrder.ASC, left.getMaxLength()); +SortOrder toSortOrder = strategy == Strategy.SORT_MERGE ? SortOrder.ASC : (strategy == Strategy.HASH_BUILD_LEFT ? right.getSortOrder() : left.getSortOrder()); +if (left.getDataType() != toType || left.getSortOrder() != toSortOrder) { +left =
phoenix git commit: PHOENIX-3050 Handle DESC columns in child/parent join optimization
Repository: phoenix Updated Branches: refs/heads/5.x-HBase-2.0 e26be0d37 -> b2da76c6d PHOENIX-3050 Handle DESC columns in child/parent join optimization Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/b2da76c6 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/b2da76c6 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/b2da76c6 Branch: refs/heads/5.x-HBase-2.0 Commit: b2da76c6d77d97d9a4d199a4a0351c948d2fa79f Parents: e26be0d Author: maryannxueAuthored: Wed Dec 6 12:07:16 2017 -0800 Committer: maryannxue Committed: Mon Feb 19 22:29:40 2018 -0800 -- .../phoenix/end2end/join/HashJoinMoreIT.java | 5 + .../org/apache/phoenix/compile/JoinCompiler.java | 19 +-- .../apache/phoenix/compile/QueryCompiler.java| 6 +++--- .../apache/phoenix/compile/WhereOptimizer.java | 5 - 4 files changed, 21 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/b2da76c6/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java index 37ffd02..f09f1d3 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java @@ -895,6 +895,11 @@ public class HashJoinMoreIT extends ParallelStatsDisabledIT { + "FROM ( SELECT ACCOUNT_ID, BUCKET_ID, OBJECT_ID, MAX(OBJECT_VERSION) AS MAXVER " + " FROM test2961 GROUP BY ACCOUNT_ID, BUCKET_ID, OBJECT_ID) AS X " + " INNER JOIN test2961 AS OBJ ON X.ACCOUNT_ID = OBJ.ACCOUNT_ID AND X.BUCKET_ID = OBJ.BUCKET_ID AND X.OBJECT_ID = OBJ.OBJECT_ID AND X.MAXVER = OBJ.OBJECT_VERSION"; +rs = conn.createStatement().executeQuery("explain " + q); +String plan = QueryUtil.getExplainPlan(rs); +String dynamicFilter = "DYNAMIC SERVER FILTER BY (OBJ.ACCOUNT_ID, OBJ.BUCKET_ID, OBJ.OBJECT_ID, OBJ.OBJECT_VERSION) IN ((X.ACCOUNT_ID, X.BUCKET_ID, X.OBJECT_ID, X.MAXVER))"; +assertTrue("Expected '" + dynamicFilter + "' to be used for the query, but got:\n" + plan, +plan.contains(dynamicFilter)); rs = conn.createStatement().executeQuery(q); assertTrue(rs.next()); assertEquals("", rs.getString(4)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/b2da76c6/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java index f9d8711..f3c4c24 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java @@ -108,6 +108,12 @@ import com.google.common.collect.Sets; public class JoinCompiler { +public enum Strategy { +HASH_BUILD_LEFT, +HASH_BUILD_RIGHT, +SORT_MERGE, +} + public enum ColumnRefType { JOINLOCAL, GENERAL, @@ -487,7 +493,7 @@ public class JoinCompiler { return dependencies; } -public Pair compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, boolean sortExpressions) throws SQLException { +public Pair
compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, Strategy strategy) throws SQLException { if (onConditions.isEmpty()) { return new Pair
( Collections. singletonList(LiteralExpression.newConstant(1)), @@ -503,15 +509,16 @@ public class JoinCompiler { rhsCompiler.reset(); Expression right = condition.getRHS().accept(rhsCompiler); PDataType toType = getCommonType(left.getDataType(), right.getDataType()); -if (left.getDataType() != toType || left.getSortOrder() == SortOrder.DESC) { -left = CoerceExpression.create(left, toType, SortOrder.ASC, left.getMaxLength()); +SortOrder toSortOrder = strategy == Strategy.SORT_MERGE ? SortOrder.ASC : (strategy == Strategy.HASH_BUILD_LEFT ? right.getSortOrder() : left.getSortOrder()); +if (left.getDataType() != toType || left.getSortOrder() != toSortOrder) { +left =
[28/35] phoenix git commit: PHOENIX-3050 Handle DESC columns in child/parent join optimization
PHOENIX-3050 Handle DESC columns in child/parent join optimization Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/d5bc5ce2 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/d5bc5ce2 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/d5bc5ce2 Branch: refs/heads/4.x-cdh5.11.2 Commit: d5bc5ce2777486e00efa6237fa965843035ee324 Parents: 515f10d Author: maryannxueAuthored: Mon Nov 6 02:37:55 2017 + Committer: Pedro Boado Committed: Wed Jan 31 22:24:48 2018 + -- .../phoenix/end2end/join/HashJoinMoreIT.java | 5 + .../org/apache/phoenix/compile/JoinCompiler.java | 19 +-- .../apache/phoenix/compile/QueryCompiler.java| 6 +++--- .../apache/phoenix/compile/WhereOptimizer.java | 5 - 4 files changed, 21 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/d5bc5ce2/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java index 37ffd02..f09f1d3 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java @@ -895,6 +895,11 @@ public class HashJoinMoreIT extends ParallelStatsDisabledIT { + "FROM ( SELECT ACCOUNT_ID, BUCKET_ID, OBJECT_ID, MAX(OBJECT_VERSION) AS MAXVER " + " FROM test2961 GROUP BY ACCOUNT_ID, BUCKET_ID, OBJECT_ID) AS X " + " INNER JOIN test2961 AS OBJ ON X.ACCOUNT_ID = OBJ.ACCOUNT_ID AND X.BUCKET_ID = OBJ.BUCKET_ID AND X.OBJECT_ID = OBJ.OBJECT_ID AND X.MAXVER = OBJ.OBJECT_VERSION"; +rs = conn.createStatement().executeQuery("explain " + q); +String plan = QueryUtil.getExplainPlan(rs); +String dynamicFilter = "DYNAMIC SERVER FILTER BY (OBJ.ACCOUNT_ID, OBJ.BUCKET_ID, OBJ.OBJECT_ID, OBJ.OBJECT_VERSION) IN ((X.ACCOUNT_ID, X.BUCKET_ID, X.OBJECT_ID, X.MAXVER))"; +assertTrue("Expected '" + dynamicFilter + "' to be used for the query, but got:\n" + plan, +plan.contains(dynamicFilter)); rs = conn.createStatement().executeQuery(q); assertTrue(rs.next()); assertEquals("", rs.getString(4)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/d5bc5ce2/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java index 887e2d2..439a79b 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java @@ -110,6 +110,12 @@ import com.google.common.collect.Sets; public class JoinCompiler { +public enum Strategy { +HASH_BUILD_LEFT, +HASH_BUILD_RIGHT, +SORT_MERGE, +} + public enum ColumnRefType { JOINLOCAL, GENERAL, @@ -489,7 +495,7 @@ public class JoinCompiler { return dependencies; } -public Pair compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, boolean sortExpressions) throws SQLException { +public Pair
compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, Strategy strategy) throws SQLException { if (onConditions.isEmpty()) { return new Pair
( Collections. singletonList(LiteralExpression.newConstant(1)), @@ -505,15 +511,16 @@ public class JoinCompiler { rhsCompiler.reset(); Expression right = condition.getRHS().accept(rhsCompiler); PDataType toType = getCommonType(left.getDataType(), right.getDataType()); -if (left.getDataType() != toType || left.getSortOrder() == SortOrder.DESC) { -left = CoerceExpression.create(left, toType, SortOrder.ASC, left.getMaxLength()); +SortOrder toSortOrder = strategy == Strategy.SORT_MERGE ? SortOrder.ASC : (strategy == Strategy.HASH_BUILD_LEFT ? right.getSortOrder() : left.getSortOrder()); +if (left.getDataType() != toType || left.getSortOrder() != toSortOrder) { +left = CoerceExpression.create(left, toType, toSortOrder, left.getMaxLength()); } -
[23/50] [abbrv] phoenix git commit: PHOENIX-3050 Handle DESC columns in child/parent join optimization
PHOENIX-3050 Handle DESC columns in child/parent join optimization Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/071fbce4 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/071fbce4 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/071fbce4 Branch: refs/heads/system-catalog Commit: 071fbce499c5303ffdcd4bbe25c1cda788aced0c Parents: d77c237 Author: maryannxueAuthored: Wed Dec 6 12:07:16 2017 -0800 Committer: maryannxue Committed: Wed Dec 6 12:07:16 2017 -0800 -- .../phoenix/end2end/join/HashJoinMoreIT.java | 5 + .../org/apache/phoenix/compile/JoinCompiler.java | 19 +-- .../apache/phoenix/compile/QueryCompiler.java| 6 +++--- .../apache/phoenix/compile/WhereOptimizer.java | 5 - 4 files changed, 21 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/071fbce4/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java index 37ffd02..f09f1d3 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java @@ -895,6 +895,11 @@ public class HashJoinMoreIT extends ParallelStatsDisabledIT { + "FROM ( SELECT ACCOUNT_ID, BUCKET_ID, OBJECT_ID, MAX(OBJECT_VERSION) AS MAXVER " + " FROM test2961 GROUP BY ACCOUNT_ID, BUCKET_ID, OBJECT_ID) AS X " + " INNER JOIN test2961 AS OBJ ON X.ACCOUNT_ID = OBJ.ACCOUNT_ID AND X.BUCKET_ID = OBJ.BUCKET_ID AND X.OBJECT_ID = OBJ.OBJECT_ID AND X.MAXVER = OBJ.OBJECT_VERSION"; +rs = conn.createStatement().executeQuery("explain " + q); +String plan = QueryUtil.getExplainPlan(rs); +String dynamicFilter = "DYNAMIC SERVER FILTER BY (OBJ.ACCOUNT_ID, OBJ.BUCKET_ID, OBJ.OBJECT_ID, OBJ.OBJECT_VERSION) IN ((X.ACCOUNT_ID, X.BUCKET_ID, X.OBJECT_ID, X.MAXVER))"; +assertTrue("Expected '" + dynamicFilter + "' to be used for the query, but got:\n" + plan, +plan.contains(dynamicFilter)); rs = conn.createStatement().executeQuery(q); assertTrue(rs.next()); assertEquals("", rs.getString(4)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/071fbce4/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java index 887e2d2..439a79b 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java @@ -110,6 +110,12 @@ import com.google.common.collect.Sets; public class JoinCompiler { +public enum Strategy { +HASH_BUILD_LEFT, +HASH_BUILD_RIGHT, +SORT_MERGE, +} + public enum ColumnRefType { JOINLOCAL, GENERAL, @@ -489,7 +495,7 @@ public class JoinCompiler { return dependencies; } -public Pair compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, boolean sortExpressions) throws SQLException { +public Pair
compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, Strategy strategy) throws SQLException { if (onConditions.isEmpty()) { return new Pair
( Collections. singletonList(LiteralExpression.newConstant(1)), @@ -505,15 +511,16 @@ public class JoinCompiler { rhsCompiler.reset(); Expression right = condition.getRHS().accept(rhsCompiler); PDataType toType = getCommonType(left.getDataType(), right.getDataType()); -if (left.getDataType() != toType || left.getSortOrder() == SortOrder.DESC) { -left = CoerceExpression.create(left, toType, SortOrder.ASC, left.getMaxLength()); +SortOrder toSortOrder = strategy == Strategy.SORT_MERGE ? SortOrder.ASC : (strategy == Strategy.HASH_BUILD_LEFT ? right.getSortOrder() : left.getSortOrder()); +if (left.getDataType() != toType || left.getSortOrder() != toSortOrder) { +left = CoerceExpression.create(left, toType, toSortOrder, left.getMaxLength()); } -
[14/16] phoenix git commit: PHOENIX-3050 Handle DESC columns in child/parent join optimization
PHOENIX-3050 Handle DESC columns in child/parent join optimization Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/4968e88e Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/4968e88e Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/4968e88e Branch: refs/heads/4.x-HBase-1.2 Commit: 4968e88e6d5f4d650ee05303dbce8baa5c911087 Parents: 7e61234 Author: maryannxueAuthored: Mon Nov 6 02:37:55 2017 + Committer: James Taylor Committed: Sat Dec 16 16:42:54 2017 -0800 -- .../phoenix/end2end/join/HashJoinMoreIT.java | 5 + .../org/apache/phoenix/compile/JoinCompiler.java | 19 +-- .../apache/phoenix/compile/QueryCompiler.java| 6 +++--- .../apache/phoenix/compile/WhereOptimizer.java | 5 - 4 files changed, 21 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/4968e88e/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java index 37ffd02..f09f1d3 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java @@ -895,6 +895,11 @@ public class HashJoinMoreIT extends ParallelStatsDisabledIT { + "FROM ( SELECT ACCOUNT_ID, BUCKET_ID, OBJECT_ID, MAX(OBJECT_VERSION) AS MAXVER " + " FROM test2961 GROUP BY ACCOUNT_ID, BUCKET_ID, OBJECT_ID) AS X " + " INNER JOIN test2961 AS OBJ ON X.ACCOUNT_ID = OBJ.ACCOUNT_ID AND X.BUCKET_ID = OBJ.BUCKET_ID AND X.OBJECT_ID = OBJ.OBJECT_ID AND X.MAXVER = OBJ.OBJECT_VERSION"; +rs = conn.createStatement().executeQuery("explain " + q); +String plan = QueryUtil.getExplainPlan(rs); +String dynamicFilter = "DYNAMIC SERVER FILTER BY (OBJ.ACCOUNT_ID, OBJ.BUCKET_ID, OBJ.OBJECT_ID, OBJ.OBJECT_VERSION) IN ((X.ACCOUNT_ID, X.BUCKET_ID, X.OBJECT_ID, X.MAXVER))"; +assertTrue("Expected '" + dynamicFilter + "' to be used for the query, but got:\n" + plan, +plan.contains(dynamicFilter)); rs = conn.createStatement().executeQuery(q); assertTrue(rs.next()); assertEquals("", rs.getString(4)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/4968e88e/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java index 887e2d2..439a79b 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java @@ -110,6 +110,12 @@ import com.google.common.collect.Sets; public class JoinCompiler { +public enum Strategy { +HASH_BUILD_LEFT, +HASH_BUILD_RIGHT, +SORT_MERGE, +} + public enum ColumnRefType { JOINLOCAL, GENERAL, @@ -489,7 +495,7 @@ public class JoinCompiler { return dependencies; } -public Pair compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, boolean sortExpressions) throws SQLException { +public Pair
compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, Strategy strategy) throws SQLException { if (onConditions.isEmpty()) { return new Pair
( Collections. singletonList(LiteralExpression.newConstant(1)), @@ -505,15 +511,16 @@ public class JoinCompiler { rhsCompiler.reset(); Expression right = condition.getRHS().accept(rhsCompiler); PDataType toType = getCommonType(left.getDataType(), right.getDataType()); -if (left.getDataType() != toType || left.getSortOrder() == SortOrder.DESC) { -left = CoerceExpression.create(left, toType, SortOrder.ASC, left.getMaxLength()); +SortOrder toSortOrder = strategy == Strategy.SORT_MERGE ? SortOrder.ASC : (strategy == Strategy.HASH_BUILD_LEFT ? right.getSortOrder() : left.getSortOrder()); +if (left.getDataType() != toType || left.getSortOrder() != toSortOrder) { +left = CoerceExpression.create(left, toType, toSortOrder, left.getMaxLength()); } -
phoenix git commit: PHOENIX-3050 Handle DESC columns in child/parent join optimization
Repository: phoenix Updated Branches: refs/heads/master d77c237b5 -> 071fbce49 PHOENIX-3050 Handle DESC columns in child/parent join optimization Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/071fbce4 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/071fbce4 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/071fbce4 Branch: refs/heads/master Commit: 071fbce499c5303ffdcd4bbe25c1cda788aced0c Parents: d77c237 Author: maryannxueAuthored: Wed Dec 6 12:07:16 2017 -0800 Committer: maryannxue Committed: Wed Dec 6 12:07:16 2017 -0800 -- .../phoenix/end2end/join/HashJoinMoreIT.java | 5 + .../org/apache/phoenix/compile/JoinCompiler.java | 19 +-- .../apache/phoenix/compile/QueryCompiler.java| 6 +++--- .../apache/phoenix/compile/WhereOptimizer.java | 5 - 4 files changed, 21 insertions(+), 14 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/071fbce4/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java index 37ffd02..f09f1d3 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/join/HashJoinMoreIT.java @@ -895,6 +895,11 @@ public class HashJoinMoreIT extends ParallelStatsDisabledIT { + "FROM ( SELECT ACCOUNT_ID, BUCKET_ID, OBJECT_ID, MAX(OBJECT_VERSION) AS MAXVER " + " FROM test2961 GROUP BY ACCOUNT_ID, BUCKET_ID, OBJECT_ID) AS X " + " INNER JOIN test2961 AS OBJ ON X.ACCOUNT_ID = OBJ.ACCOUNT_ID AND X.BUCKET_ID = OBJ.BUCKET_ID AND X.OBJECT_ID = OBJ.OBJECT_ID AND X.MAXVER = OBJ.OBJECT_VERSION"; +rs = conn.createStatement().executeQuery("explain " + q); +String plan = QueryUtil.getExplainPlan(rs); +String dynamicFilter = "DYNAMIC SERVER FILTER BY (OBJ.ACCOUNT_ID, OBJ.BUCKET_ID, OBJ.OBJECT_ID, OBJ.OBJECT_VERSION) IN ((X.ACCOUNT_ID, X.BUCKET_ID, X.OBJECT_ID, X.MAXVER))"; +assertTrue("Expected '" + dynamicFilter + "' to be used for the query, but got:\n" + plan, +plan.contains(dynamicFilter)); rs = conn.createStatement().executeQuery(q); assertTrue(rs.next()); assertEquals("", rs.getString(4)); http://git-wip-us.apache.org/repos/asf/phoenix/blob/071fbce4/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java index 887e2d2..439a79b 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/JoinCompiler.java @@ -110,6 +110,12 @@ import com.google.common.collect.Sets; public class JoinCompiler { +public enum Strategy { +HASH_BUILD_LEFT, +HASH_BUILD_RIGHT, +SORT_MERGE, +} + public enum ColumnRefType { JOINLOCAL, GENERAL, @@ -489,7 +495,7 @@ public class JoinCompiler { return dependencies; } -public Pair compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, boolean sortExpressions) throws SQLException { +public Pair
compileJoinConditions(StatementContext lhsCtx, StatementContext rhsCtx, Strategy strategy) throws SQLException { if (onConditions.isEmpty()) { return new Pair
( Collections. singletonList(LiteralExpression.newConstant(1)), @@ -505,15 +511,16 @@ public class JoinCompiler { rhsCompiler.reset(); Expression right = condition.getRHS().accept(rhsCompiler); PDataType toType = getCommonType(left.getDataType(), right.getDataType()); -if (left.getDataType() != toType || left.getSortOrder() == SortOrder.DESC) { -left = CoerceExpression.create(left, toType, SortOrder.ASC, left.getMaxLength()); +SortOrder toSortOrder = strategy == Strategy.SORT_MERGE ? SortOrder.ASC : (strategy == Strategy.HASH_BUILD_LEFT ? right.getSortOrder() : left.getSortOrder()); +if (left.getDataType() != toType || left.getSortOrder() != toSortOrder) { +left = CoerceExpression.create(left,