[09/26] phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum)
PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/07f92732 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/07f92732 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/07f92732 Branch: refs/heads/calcite Commit: 07f92732f9c6d2d9464012cebeb4cefc10da95d5 Parents: b326995 Author: Thomas D'SilvaAuthored: Thu Dec 22 17:29:35 2016 -0800 Committer: Thomas D'Silva Committed: Tue Dec 27 11:44:54 2016 -0800 -- .../main/java/org/apache/phoenix/compile/WhereOptimizer.java | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/07f92732/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java index 0681925..5e15f61 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java @@ -439,7 +439,12 @@ public class WhereOptimizer { if (l.size() == 1) { return l.get(0); } -return new AndExpression(l); +try { +return AndExpression.create(l); +} catch (SQLException e) { +//shouldn't happen +throw new RuntimeException(e); +} } return node; }
[02/26] phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true
PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/c5046047 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/c5046047 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/c5046047 Branch: refs/heads/calcite Commit: c5046047a78e0365d75bc696dff4870304c2b5b2 Parents: bd2acd5 Author: Thomas D'SilvaAuthored: Tue Dec 20 17:56:37 2016 -0800 Committer: Thomas D'Silva Committed: Thu Dec 22 10:54:24 2016 -0800 -- .../end2end/TenantSpecificViewIndexIT.java | 47 .../apache/phoenix/compile/WhereCompiler.java | 3 +- .../org/apache/phoenix/util/ExpressionUtil.java | 10 + .../phoenix/query/KeyRangeIntersectTest.java| 9 +++- 4 files changed, 67 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/c5046047/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java index b7b8902..6ae1445 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java @@ -19,6 +19,7 @@ package org.apache.phoenix.end2end; import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceName; import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceSchemaName; +import static org.apache.phoenix.util.PhoenixRuntime.TENANT_ID_ATTRIB; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -28,6 +29,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Properties; import org.apache.hadoop.hbase.util.Bytes; @@ -284,4 +286,49 @@ public class TenantSpecificViewIndexIT extends BaseTenantSpecificViewIndexIT { assertEquals("value1", rs.getString(1)); assertFalse("No other rows should have been returned for the tenant", rs.next()); // should have just returned one record since for org1 we have only one row. } + +@Test +public void testOverlappingDatesFilter() throws SQLException { +String tenantUrl = getUrl() + ';' + TENANT_ID_ATTRIB + "=tenant1" + ";" + QueryServices.FORCE_ROW_KEY_ORDER_ATTRIB + "=true"; +String tableName = generateUniqueName(); +String viewName = generateUniqueName(); +String ddl = "CREATE TABLE " + tableName ++ "(ORGANIZATION_ID CHAR(15) NOT NULL, " ++ "PARENT_TYPE CHAR(3) NOT NULL, " ++ "PARENT_ID CHAR(15) NOT NULL," ++ "CREATED_DATE DATE NOT NULL " ++ "CONSTRAINT PK PRIMARY KEY (ORGANIZATION_ID, PARENT_TYPE, PARENT_ID, CREATED_DATE DESC)" ++ ") VERSIONS=1,MULTI_TENANT=true,REPLICATION_SCOPE=1"; + +try (Connection conn = DriverManager.getConnection(getUrl()); +Connection viewConn = DriverManager.getConnection(tenantUrl) ) { +// create table +conn.createStatement().execute(ddl); +// create index +conn.createStatement().execute("CREATE INDEX IF NOT EXISTS IDX ON " + tableName + "(PARENT_TYPE, CREATED_DATE, PARENT_ID)"); +// create view +viewConn.createStatement().execute("CREATE VIEW IF NOT EXISTS " + viewName + " AS SELECT * FROM "+ tableName ); + +String query ="EXPLAIN SELECT PARENT_ID FROM " + viewName ++ " WHERE PARENT_TYPE='001' " ++ "AND (CREATED_DATE > to_date('2011-01-01') AND CREATED_DATE < to_date('2016-10-31'))" ++ "ORDER BY PARENT_TYPE,CREATED_DATE LIMIT 501"; + +ResultSet rs = viewConn.createStatement().executeQuery(query); +String expectedPlanFormat = "CLIENT SERIAL 1-WAY RANGE SCAN OVER IDX ['tenant1','001','%s 00:00:00.001'] - ['tenant1','001','%s 00:00:00.000']" + "\n" + +"SERVER FILTER BY FIRST KEY ONLY" + "\n" + +"SERVER 501 ROW LIMIT" + "\n" + +"CLIENT 501 ROW LIMIT"; +assertEquals(String.format(expectedPlanFormat, "2011-01-01", "2016-10-31"), QueryUtil.getExplainPlan(rs)); + +query ="EXPLAIN
phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum)
Repository: phoenix Updated Branches: refs/heads/master b32699505 -> 07f92732f PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/07f92732 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/07f92732 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/07f92732 Branch: refs/heads/master Commit: 07f92732f9c6d2d9464012cebeb4cefc10da95d5 Parents: b326995 Author: Thomas D'SilvaAuthored: Thu Dec 22 17:29:35 2016 -0800 Committer: Thomas D'Silva Committed: Tue Dec 27 11:44:54 2016 -0800 -- .../main/java/org/apache/phoenix/compile/WhereOptimizer.java | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/07f92732/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java index 0681925..5e15f61 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java @@ -439,7 +439,12 @@ public class WhereOptimizer { if (l.size() == 1) { return l.get(0); } -return new AndExpression(l); +try { +return AndExpression.create(l); +} catch (SQLException e) { +//shouldn't happen +throw new RuntimeException(e); +} } return node; }
phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum)
Repository: phoenix Updated Branches: refs/heads/4.x-HBase-0.98 95759f4ee -> 305e3cb21 PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/305e3cb2 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/305e3cb2 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/305e3cb2 Branch: refs/heads/4.x-HBase-0.98 Commit: 305e3cb2113e441e705f34cf390eae97fa0cb42a Parents: 95759f4 Author: Thomas D'SilvaAuthored: Thu Dec 22 17:29:35 2016 -0800 Committer: Thomas D'Silva Committed: Tue Dec 27 11:40:39 2016 -0800 -- .../main/java/org/apache/phoenix/compile/WhereOptimizer.java | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/305e3cb2/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java index 0681925..5e15f61 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java @@ -439,7 +439,12 @@ public class WhereOptimizer { if (l.size() == 1) { return l.get(0); } -return new AndExpression(l); +try { +return AndExpression.create(l); +} catch (SQLException e) { +//shouldn't happen +throw new RuntimeException(e); +} } return node; }
phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum)
Repository: phoenix Updated Branches: refs/heads/4.x-HBase-1.1 39bfb98ff -> d66592c43 PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/d66592c4 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/d66592c4 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/d66592c4 Branch: refs/heads/4.x-HBase-1.1 Commit: d66592c4342c533b938cb21d36174ab107e77a19 Parents: 39bfb98 Author: Thomas D'SilvaAuthored: Thu Dec 22 17:29:35 2016 -0800 Committer: Thomas D'Silva Committed: Tue Dec 27 11:40:48 2016 -0800 -- .../main/java/org/apache/phoenix/compile/WhereOptimizer.java | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/d66592c4/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java index 0681925..5e15f61 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java @@ -439,7 +439,12 @@ public class WhereOptimizer { if (l.size() == 1) { return l.get(0); } -return new AndExpression(l); +try { +return AndExpression.create(l); +} catch (SQLException e) { +//shouldn't happen +throw new RuntimeException(e); +} } return node; }
phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum)
Repository: phoenix Updated Branches: refs/heads/4.9-HBase-0.98 f6a8acc9d -> 4340dadb2 PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/4340dadb Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/4340dadb Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/4340dadb Branch: refs/heads/4.9-HBase-0.98 Commit: 4340dadb241ce7e416dabcfa13e7cfdffe39a333 Parents: f6a8acc Author: Thomas D'SilvaAuthored: Thu Dec 22 17:29:35 2016 -0800 Committer: Thomas D'Silva Committed: Tue Dec 27 11:39:57 2016 -0800 -- .../main/java/org/apache/phoenix/compile/WhereOptimizer.java | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/4340dadb/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java index 0681925..5e15f61 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java @@ -439,7 +439,12 @@ public class WhereOptimizer { if (l.size() == 1) { return l.get(0); } -return new AndExpression(l); +try { +return AndExpression.create(l); +} catch (SQLException e) { +//shouldn't happen +throw new RuntimeException(e); +} } return node; }
phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum)
Repository: phoenix Updated Branches: refs/heads/4.9-HBase-1.2 baf3b7c04 -> fb504f2d7 PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true (addendum) Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/fb504f2d Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/fb504f2d Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/fb504f2d Branch: refs/heads/4.9-HBase-1.2 Commit: fb504f2d739e13f2076b8ead234da927ce67e1e5 Parents: baf3b7c Author: Thomas D'SilvaAuthored: Thu Dec 22 17:29:35 2016 -0800 Committer: Thomas D'Silva Committed: Tue Dec 27 11:40:27 2016 -0800 -- .../main/java/org/apache/phoenix/compile/WhereOptimizer.java | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/fb504f2d/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java index 0681925..5e15f61 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/compile/WhereOptimizer.java @@ -439,7 +439,12 @@ public class WhereOptimizer { if (l.size() == 1) { return l.get(0); } -return new AndExpression(l); +try { +return AndExpression.create(l); +} catch (SQLException e) { +//shouldn't happen +throw new RuntimeException(e); +} } return node; }
[16/42] phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true
PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/54b7c218 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/54b7c218 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/54b7c218 Branch: refs/heads/encodecolumns2 Commit: 54b7c218d01ee26e5cbf16230ea2fc85d6ffa57f Parents: 5706f51 Author: Thomas D'SilvaAuthored: Tue Dec 20 17:56:37 2016 -0800 Committer: Thomas D'Silva Committed: Thu Dec 22 10:50:43 2016 -0800 -- .../end2end/TenantSpecificViewIndexIT.java | 47 .../apache/phoenix/compile/WhereCompiler.java | 3 +- .../org/apache/phoenix/util/ExpressionUtil.java | 10 + .../phoenix/query/KeyRangeIntersectTest.java| 9 +++- 4 files changed, 67 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/54b7c218/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java index 3519cf7..cc2e46a 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java @@ -19,6 +19,7 @@ package org.apache.phoenix.end2end; import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceName; import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceSchemaName; +import static org.apache.phoenix.util.PhoenixRuntime.TENANT_ID_ATTRIB; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -28,6 +29,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Properties; import org.apache.hadoop.hbase.util.Bytes; @@ -284,4 +286,49 @@ public class TenantSpecificViewIndexIT extends BaseTenantSpecificViewIndexIT { assertEquals("value1", rs.getString(1)); assertFalse("No other rows should have been returned for the tenant", rs.next()); // should have just returned one record since for org1 we have only one row. } + +@Test +public void testOverlappingDatesFilter() throws SQLException { +String tenantUrl = getUrl() + ';' + TENANT_ID_ATTRIB + "=tenant1" + ";" + QueryServices.FORCE_ROW_KEY_ORDER_ATTRIB + "=true"; +String tableName = generateUniqueName(); +String viewName = generateUniqueName(); +String ddl = "CREATE TABLE " + tableName ++ "(ORGANIZATION_ID CHAR(15) NOT NULL, " ++ "PARENT_TYPE CHAR(3) NOT NULL, " ++ "PARENT_ID CHAR(15) NOT NULL," ++ "CREATED_DATE DATE NOT NULL " ++ "CONSTRAINT PK PRIMARY KEY (ORGANIZATION_ID, PARENT_TYPE, PARENT_ID, CREATED_DATE DESC)" ++ ") VERSIONS=1,MULTI_TENANT=true,REPLICATION_SCOPE=1"; + +try (Connection conn = DriverManager.getConnection(getUrl()); +Connection viewConn = DriverManager.getConnection(tenantUrl) ) { +// create table +conn.createStatement().execute(ddl); +// create index +conn.createStatement().execute("CREATE INDEX IF NOT EXISTS IDX ON " + tableName + "(PARENT_TYPE, CREATED_DATE, PARENT_ID)"); +// create view +viewConn.createStatement().execute("CREATE VIEW IF NOT EXISTS " + viewName + " AS SELECT * FROM "+ tableName ); + +String query ="EXPLAIN SELECT PARENT_ID FROM " + viewName ++ " WHERE PARENT_TYPE='001' " ++ "AND (CREATED_DATE > to_date('2011-01-01') AND CREATED_DATE < to_date('2016-10-31'))" ++ "ORDER BY PARENT_TYPE,CREATED_DATE LIMIT 501"; + +ResultSet rs = viewConn.createStatement().executeQuery(query); +String expectedPlanFormat = "CLIENT SERIAL 1-WAY RANGE SCAN OVER IDX ['tenant1','001','%s 00:00:00.001'] - ['tenant1','001','%s 00:00:00.000']" + "\n" + +"SERVER FILTER BY FIRST KEY ONLY" + "\n" + +"SERVER 501 ROW LIMIT" + "\n" + +"CLIENT 501 ROW LIMIT"; +assertEquals(String.format(expectedPlanFormat, "2011-01-01", "2016-10-31"), QueryUtil.getExplainPlan(rs)); + +query
phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true
Repository: phoenix Updated Branches: refs/heads/master bd2acd540 -> c5046047a PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/c5046047 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/c5046047 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/c5046047 Branch: refs/heads/master Commit: c5046047a78e0365d75bc696dff4870304c2b5b2 Parents: bd2acd5 Author: Thomas D'SilvaAuthored: Tue Dec 20 17:56:37 2016 -0800 Committer: Thomas D'Silva Committed: Thu Dec 22 10:54:24 2016 -0800 -- .../end2end/TenantSpecificViewIndexIT.java | 47 .../apache/phoenix/compile/WhereCompiler.java | 3 +- .../org/apache/phoenix/util/ExpressionUtil.java | 10 + .../phoenix/query/KeyRangeIntersectTest.java| 9 +++- 4 files changed, 67 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/c5046047/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java index b7b8902..6ae1445 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java @@ -19,6 +19,7 @@ package org.apache.phoenix.end2end; import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceName; import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceSchemaName; +import static org.apache.phoenix.util.PhoenixRuntime.TENANT_ID_ATTRIB; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -28,6 +29,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Properties; import org.apache.hadoop.hbase.util.Bytes; @@ -284,4 +286,49 @@ public class TenantSpecificViewIndexIT extends BaseTenantSpecificViewIndexIT { assertEquals("value1", rs.getString(1)); assertFalse("No other rows should have been returned for the tenant", rs.next()); // should have just returned one record since for org1 we have only one row. } + +@Test +public void testOverlappingDatesFilter() throws SQLException { +String tenantUrl = getUrl() + ';' + TENANT_ID_ATTRIB + "=tenant1" + ";" + QueryServices.FORCE_ROW_KEY_ORDER_ATTRIB + "=true"; +String tableName = generateUniqueName(); +String viewName = generateUniqueName(); +String ddl = "CREATE TABLE " + tableName ++ "(ORGANIZATION_ID CHAR(15) NOT NULL, " ++ "PARENT_TYPE CHAR(3) NOT NULL, " ++ "PARENT_ID CHAR(15) NOT NULL," ++ "CREATED_DATE DATE NOT NULL " ++ "CONSTRAINT PK PRIMARY KEY (ORGANIZATION_ID, PARENT_TYPE, PARENT_ID, CREATED_DATE DESC)" ++ ") VERSIONS=1,MULTI_TENANT=true,REPLICATION_SCOPE=1"; + +try (Connection conn = DriverManager.getConnection(getUrl()); +Connection viewConn = DriverManager.getConnection(tenantUrl) ) { +// create table +conn.createStatement().execute(ddl); +// create index +conn.createStatement().execute("CREATE INDEX IF NOT EXISTS IDX ON " + tableName + "(PARENT_TYPE, CREATED_DATE, PARENT_ID)"); +// create view +viewConn.createStatement().execute("CREATE VIEW IF NOT EXISTS " + viewName + " AS SELECT * FROM "+ tableName ); + +String query ="EXPLAIN SELECT PARENT_ID FROM " + viewName ++ " WHERE PARENT_TYPE='001' " ++ "AND (CREATED_DATE > to_date('2011-01-01') AND CREATED_DATE < to_date('2016-10-31'))" ++ "ORDER BY PARENT_TYPE,CREATED_DATE LIMIT 501"; + +ResultSet rs = viewConn.createStatement().executeQuery(query); +String expectedPlanFormat = "CLIENT SERIAL 1-WAY RANGE SCAN OVER IDX ['tenant1','001','%s 00:00:00.001'] - ['tenant1','001','%s 00:00:00.000']" + "\n" + +"SERVER FILTER BY FIRST KEY ONLY" + "\n" + +"SERVER 501 ROW LIMIT" + "\n" + +"CLIENT 501 ROW LIMIT"; +assertEquals(String.format(expectedPlanFormat, "2011-01-01",
phoenix git commit: PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true
Repository: phoenix Updated Branches: refs/heads/4.9-HBase-0.98 f3117248f -> f6a8acc9d PHOENIX-3516 Performance Issues with queries that have compound filters and specify phoenix.query.force.rowkeyorder=true Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/f6a8acc9 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/f6a8acc9 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/f6a8acc9 Branch: refs/heads/4.9-HBase-0.98 Commit: f6a8acc9d0ef127d54af0e261be97319e0d04a12 Parents: f311724 Author: Thomas D'SilvaAuthored: Tue Dec 20 17:56:37 2016 -0800 Committer: Thomas D'Silva Committed: Thu Dec 22 10:50:30 2016 -0800 -- .../end2end/TenantSpecificViewIndexIT.java | 47 .../apache/phoenix/compile/WhereCompiler.java | 3 +- .../org/apache/phoenix/util/ExpressionUtil.java | 10 + .../phoenix/query/KeyRangeIntersectTest.java| 9 +++- 4 files changed, 67 insertions(+), 2 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/f6a8acc9/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java index 3519cf7..cc2e46a 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/end2end/TenantSpecificViewIndexIT.java @@ -19,6 +19,7 @@ package org.apache.phoenix.end2end; import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceName; import static org.apache.phoenix.util.MetaDataUtil.getViewIndexSequenceSchemaName; +import static org.apache.phoenix.util.PhoenixRuntime.TENANT_ID_ATTRIB; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -28,6 +29,7 @@ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.Properties; import org.apache.hadoop.hbase.util.Bytes; @@ -284,4 +286,49 @@ public class TenantSpecificViewIndexIT extends BaseTenantSpecificViewIndexIT { assertEquals("value1", rs.getString(1)); assertFalse("No other rows should have been returned for the tenant", rs.next()); // should have just returned one record since for org1 we have only one row. } + +@Test +public void testOverlappingDatesFilter() throws SQLException { +String tenantUrl = getUrl() + ';' + TENANT_ID_ATTRIB + "=tenant1" + ";" + QueryServices.FORCE_ROW_KEY_ORDER_ATTRIB + "=true"; +String tableName = generateUniqueName(); +String viewName = generateUniqueName(); +String ddl = "CREATE TABLE " + tableName ++ "(ORGANIZATION_ID CHAR(15) NOT NULL, " ++ "PARENT_TYPE CHAR(3) NOT NULL, " ++ "PARENT_ID CHAR(15) NOT NULL," ++ "CREATED_DATE DATE NOT NULL " ++ "CONSTRAINT PK PRIMARY KEY (ORGANIZATION_ID, PARENT_TYPE, PARENT_ID, CREATED_DATE DESC)" ++ ") VERSIONS=1,MULTI_TENANT=true,REPLICATION_SCOPE=1"; + +try (Connection conn = DriverManager.getConnection(getUrl()); +Connection viewConn = DriverManager.getConnection(tenantUrl) ) { +// create table +conn.createStatement().execute(ddl); +// create index +conn.createStatement().execute("CREATE INDEX IF NOT EXISTS IDX ON " + tableName + "(PARENT_TYPE, CREATED_DATE, PARENT_ID)"); +// create view +viewConn.createStatement().execute("CREATE VIEW IF NOT EXISTS " + viewName + " AS SELECT * FROM "+ tableName ); + +String query ="EXPLAIN SELECT PARENT_ID FROM " + viewName ++ " WHERE PARENT_TYPE='001' " ++ "AND (CREATED_DATE > to_date('2011-01-01') AND CREATED_DATE < to_date('2016-10-31'))" ++ "ORDER BY PARENT_TYPE,CREATED_DATE LIMIT 501"; + +ResultSet rs = viewConn.createStatement().executeQuery(query); +String expectedPlanFormat = "CLIENT SERIAL 1-WAY RANGE SCAN OVER IDX ['tenant1','001','%s 00:00:00.001'] - ['tenant1','001','%s 00:00:00.000']" + "\n" + +"SERVER FILTER BY FIRST KEY ONLY" + "\n" + +"SERVER 501 ROW LIMIT" + "\n" + +"CLIENT 501 ROW LIMIT"; +assertEquals(String.format(expectedPlanFormat,