[1/3] phoenix git commit: PHOENIX-2884 Fix EXPLAIN plan for offset on salted table
Repository: phoenix Updated Branches: refs/heads/4.x-HBase-0.98 ea93058f4 -> 4837f1ff9 PHOENIX-2884 Fix EXPLAIN plan for offset on salted table Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/a9934ef9 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/a9934ef9 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/a9934ef9 Branch: refs/heads/4.x-HBase-0.98 Commit: a9934ef90aa12e133a5d609e9c6df57e670e5284 Parents: ea93058 Author: Ankit SinghalAuthored: Mon May 16 12:43:09 2016 +0530 Committer: Ankit Singhal Committed: Mon May 16 12:43:09 2016 +0530 -- .../phoenix/end2end/QueryWithOffsetIT.java | 25 .../phoenix/iterate/BaseResultIterators.java| 4 +--- 2 files changed, 21 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/a9934ef9/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java index 7f360de..f4b3440 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java @@ -38,6 +38,7 @@ import java.util.Properties; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.util.PropertiesUtil; +import org.apache.phoenix.util.QueryUtil; import org.apache.phoenix.util.ReadOnlyProps; import org.junit.BeforeClass; import org.junit.Test; @@ -50,16 +51,18 @@ import com.google.common.collect.Maps; @RunWith(Parameterized.class) public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT { -private String tableName; +private String tableName = "T"; private final String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; private final String ddl; +private final boolean isSalted; public QueryWithOffsetIT(String preSplit) { this.tableName = tableName + "_" + preSplit.charAt(2); this.ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT NULL,\n" + "k1 INTEGER NOT NULL,\n" + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 VARCHAR,\n" + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + preSplit; +this.isSalted = preSplit.startsWith(" SALT_BUCKETS"); } @BeforeClass @@ -122,16 +125,28 @@ public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT { updateStatistics(conn); String query = "SELECT t_id from " + tableName + " offset " + offset; ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query); -rs.next(); -rs.next(); -rs.next(); -assertEquals("SERVER OFFSET " + offset, rs.getString(1)); +if(!isSalted){ +assertEquals("CLIENT SERIAL 1-WAY FULL SCAN OVER T_P\n" + " SERVER FILTER BY FIRST KEY ONLY\n" ++ "SERVER OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +}else{ +assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + " SERVER FILTER BY FIRST KEY ONLY\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} rs = conn.createStatement().executeQuery(query); int i = 0; while (i++ < strings.length - offset) { assertTrue(rs.next()); assertEquals(strings[offset + i - 1], rs.getString(1)); } +query = "SELECT t_id from " + tableName + " ORDER BY v1 offset " + offset; +rs = conn.createStatement().executeQuery("EXPLAIN " + query); +if (!isSalted) { +assertEquals("CLIENT PARALLEL 5-WAY FULL SCAN OVER T_P\n" + " SERVER SORTED BY [C2.V1]\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} else { +assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + " SERVER SORTED BY [C2.V1]\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} conn.close(); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/a9934ef9/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
[1/3] phoenix git commit: PHOENIX-2884 Fix EXPLAIN plan for offset on salted table
Repository: phoenix Updated Branches: refs/heads/4.x-HBase-1.0 588eb1732 -> f30442226 PHOENIX-2884 Fix EXPLAIN plan for offset on salted table Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/c345e09c Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/c345e09c Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/c345e09c Branch: refs/heads/4.x-HBase-1.0 Commit: c345e09c889d57a83856db4a65c7c0731f6ff117 Parents: 588eb17 Author: Ankit SinghalAuthored: Mon May 16 12:36:50 2016 +0530 Committer: Ankit Singhal Committed: Mon May 16 12:36:50 2016 +0530 -- .../phoenix/end2end/QueryWithOffsetIT.java | 25 .../phoenix/iterate/BaseResultIterators.java| 4 +--- 2 files changed, 21 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/c345e09c/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java index 7f360de..f4b3440 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java @@ -38,6 +38,7 @@ import java.util.Properties; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.util.PropertiesUtil; +import org.apache.phoenix.util.QueryUtil; import org.apache.phoenix.util.ReadOnlyProps; import org.junit.BeforeClass; import org.junit.Test; @@ -50,16 +51,18 @@ import com.google.common.collect.Maps; @RunWith(Parameterized.class) public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT { -private String tableName; +private String tableName = "T"; private final String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; private final String ddl; +private final boolean isSalted; public QueryWithOffsetIT(String preSplit) { this.tableName = tableName + "_" + preSplit.charAt(2); this.ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT NULL,\n" + "k1 INTEGER NOT NULL,\n" + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 VARCHAR,\n" + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + preSplit; +this.isSalted = preSplit.startsWith(" SALT_BUCKETS"); } @BeforeClass @@ -122,16 +125,28 @@ public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT { updateStatistics(conn); String query = "SELECT t_id from " + tableName + " offset " + offset; ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query); -rs.next(); -rs.next(); -rs.next(); -assertEquals("SERVER OFFSET " + offset, rs.getString(1)); +if(!isSalted){ +assertEquals("CLIENT SERIAL 1-WAY FULL SCAN OVER T_P\n" + " SERVER FILTER BY FIRST KEY ONLY\n" ++ "SERVER OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +}else{ +assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + " SERVER FILTER BY FIRST KEY ONLY\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} rs = conn.createStatement().executeQuery(query); int i = 0; while (i++ < strings.length - offset) { assertTrue(rs.next()); assertEquals(strings[offset + i - 1], rs.getString(1)); } +query = "SELECT t_id from " + tableName + " ORDER BY v1 offset " + offset; +rs = conn.createStatement().executeQuery("EXPLAIN " + query); +if (!isSalted) { +assertEquals("CLIENT PARALLEL 5-WAY FULL SCAN OVER T_P\n" + " SERVER SORTED BY [C2.V1]\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} else { +assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + " SERVER SORTED BY [C2.V1]\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} conn.close(); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/c345e09c/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
[1/3] phoenix git commit: PHOENIX-2884 Fix EXPLAIN plan for offset on salted table
Repository: phoenix Updated Branches: refs/heads/4.x-HBase-1.1 52da01463 -> 9c3c849a1 PHOENIX-2884 Fix EXPLAIN plan for offset on salted table Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/156c3566 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/156c3566 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/156c3566 Branch: refs/heads/4.x-HBase-1.1 Commit: 156c356669a5e8ecfb31768e62d9990b459bf31c Parents: 52da014 Author: Ankit SinghalAuthored: Mon May 16 12:19:20 2016 +0530 Committer: Ankit Singhal Committed: Mon May 16 12:19:20 2016 +0530 -- .../phoenix/end2end/QueryWithOffsetIT.java | 25 .../phoenix/iterate/BaseResultIterators.java| 4 +--- 2 files changed, 21 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/156c3566/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java index dd21f31..c5b6959 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java @@ -38,6 +38,7 @@ import java.util.Properties; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.util.PropertiesUtil; +import org.apache.phoenix.util.QueryUtil; import org.apache.phoenix.util.ReadOnlyProps; import org.junit.BeforeClass; import org.junit.Test; @@ -50,16 +51,18 @@ import com.google.common.collect.Maps; @RunWith(Parameterized.class) public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT { -private String tableName; +private String tableName = "T"; private final String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; private final String ddl; +private final boolean isSalted; public QueryWithOffsetIT(String preSplit) { this.tableName=tableName + "_" + preSplit.charAt(2); this.ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT NULL,\n" + "k1 INTEGER NOT NULL,\n" + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 VARCHAR,\n" + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + preSplit; +this.isSalted = preSplit.startsWith(" SALT_BUCKETS"); } @BeforeClass @@ -122,16 +125,28 @@ public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT { updateStatistics(conn); String query = "SELECT t_id from " + tableName + " offset " + offset; ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query); -rs.next(); -rs.next(); -rs.next(); -assertEquals("SERVER OFFSET " + offset, rs.getString(1)); +if(!isSalted){ +assertEquals("CLIENT SERIAL 1-WAY FULL SCAN OVER T_P\n" + " SERVER FILTER BY FIRST KEY ONLY\n" ++ "SERVER OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +}else{ +assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + " SERVER FILTER BY FIRST KEY ONLY\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} rs = conn.createStatement().executeQuery(query); int i = 0; while (i++ < strings.length - offset) { assertTrue(rs.next()); assertEquals(strings[offset + i - 1], rs.getString(1)); } +query = "SELECT t_id from " + tableName + " ORDER BY v1 offset " + offset; +rs = conn.createStatement().executeQuery("EXPLAIN " + query); +if (!isSalted) { +assertEquals("CLIENT PARALLEL 5-WAY FULL SCAN OVER T_P\n" + " SERVER SORTED BY [C2.V1]\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} else { +assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + " SERVER SORTED BY [C2.V1]\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} conn.close(); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/156c3566/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java
[1/3] phoenix git commit: PHOENIX-2884 Fix EXPLAIN plan for offset on salted table
Repository: phoenix Updated Branches: refs/heads/master 98e783cf6 -> 5d641ad34 PHOENIX-2884 Fix EXPLAIN plan for offset on salted table Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/33fb201e Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/33fb201e Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/33fb201e Branch: refs/heads/master Commit: 33fb201ebe46ba90f81658ef9b487f3b74070a4a Parents: 98e783c Author: Ankit SinghalAuthored: Mon May 16 12:16:21 2016 +0530 Committer: Ankit Singhal Committed: Mon May 16 12:16:21 2016 +0530 -- .../phoenix/end2end/QueryWithOffsetIT.java | 25 .../phoenix/iterate/BaseResultIterators.java| 4 +--- 2 files changed, 21 insertions(+), 8 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/33fb201e/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java index dd21f31..c5b6959 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/QueryWithOffsetIT.java @@ -38,6 +38,7 @@ import java.util.Properties; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.util.PropertiesUtil; +import org.apache.phoenix.util.QueryUtil; import org.apache.phoenix.util.ReadOnlyProps; import org.junit.BeforeClass; import org.junit.Test; @@ -50,16 +51,18 @@ import com.google.common.collect.Maps; @RunWith(Parameterized.class) public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT { -private String tableName; +private String tableName = "T"; private final String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; private final String ddl; +private final boolean isSalted; public QueryWithOffsetIT(String preSplit) { this.tableName=tableName + "_" + preSplit.charAt(2); this.ddl = "CREATE TABLE " + tableName + " (t_id VARCHAR NOT NULL,\n" + "k1 INTEGER NOT NULL,\n" + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 VARCHAR,\n" + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + preSplit; +this.isSalted = preSplit.startsWith(" SALT_BUCKETS"); } @BeforeClass @@ -122,16 +125,28 @@ public class QueryWithOffsetIT extends BaseOwnClusterHBaseManagedTimeIT { updateStatistics(conn); String query = "SELECT t_id from " + tableName + " offset " + offset; ResultSet rs = conn.createStatement().executeQuery("EXPLAIN " + query); -rs.next(); -rs.next(); -rs.next(); -assertEquals("SERVER OFFSET " + offset, rs.getString(1)); +if(!isSalted){ +assertEquals("CLIENT SERIAL 1-WAY FULL SCAN OVER T_P\n" + " SERVER FILTER BY FIRST KEY ONLY\n" ++ "SERVER OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +}else{ +assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + " SERVER FILTER BY FIRST KEY ONLY\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} rs = conn.createStatement().executeQuery(query); int i = 0; while (i++ < strings.length - offset) { assertTrue(rs.next()); assertEquals(strings[offset + i - 1], rs.getString(1)); } +query = "SELECT t_id from " + tableName + " ORDER BY v1 offset " + offset; +rs = conn.createStatement().executeQuery("EXPLAIN " + query); +if (!isSalted) { +assertEquals("CLIENT PARALLEL 5-WAY FULL SCAN OVER T_P\n" + " SERVER SORTED BY [C2.V1]\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} else { +assertEquals("CLIENT PARALLEL 10-WAY FULL SCAN OVER T_A\n" + " SERVER SORTED BY [C2.V1]\n" ++ "CLIENT MERGE SORT\n" + "CLIENT OFFSET " + offset, QueryUtil.getExplainPlan(rs)); +} conn.close(); } http://git-wip-us.apache.org/repos/asf/phoenix/blob/33fb201e/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/iterate/BaseResultIterators.java