phoenix git commit: PHOENIX-2090 Refine PhoenixTableScan.computeSelfCost() when scanRanges is available
Repository: phoenix Updated Branches: refs/heads/calcite 8b68b1c4e -> 52ba5d24d PHOENIX-2090 Refine PhoenixTableScan.computeSelfCost() when scanRanges is available Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/52ba5d24 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/52ba5d24 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/52ba5d24 Branch: refs/heads/calcite Commit: 52ba5d24d6217b0f619f3dd143142ef86cbab02e Parents: 8b68b1c Author: maryannxue Authored: Fri Feb 12 21:43:12 2016 -0500 Committer: maryannxue Committed: Fri Feb 12 21:43:12 2016 -0500 -- .../it/java/org/apache/phoenix/calcite/CalciteIndexIT.java | 2 +- .../main/java/org/apache/phoenix/calcite/PhoenixTable.java | 5 + .../phoenix/calcite/rel/PhoenixAbstractAggregate.java | 3 ++- .../java/org/apache/phoenix/calcite/rel/PhoenixRel.java | 2 +- .../org/apache/phoenix/calcite/rel/PhoenixTableScan.java| 9 +++-- 5 files changed, 12 insertions(+), 9 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java index 3f0f754..d1aea74 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java @@ -93,7 +93,7 @@ public class CalciteIndexIT extends BaseCalciteIT { " PhoenixServerProject(A_STRING=[$0])\n" + "PhoenixTableScan(table=[[phoenix, IDX1]], scanOrder=[FORWARD])\n") .close(); -start(true, 1000f).sql("select a_string from aTable order by organization_id") +start(true, 100f).sql("select a_string from aTable order by organization_id") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(A_STRING=[$2], ORGANIZATION_ID=[$0])\n" + "PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n") http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java index 1539dcd..fea4c8a 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/PhoenixTable.java @@ -21,7 +21,6 @@ import org.apache.calcite.schema.impl.AbstractTable; import org.apache.calcite.sql.type.SqlTypeName; import org.apache.calcite.util.ImmutableBitSet; import org.apache.hadoop.hbase.HTableDescriptor; -import org.apache.phoenix.calcite.rel.PhoenixRel; import org.apache.phoenix.calcite.rel.PhoenixTableScan; import org.apache.phoenix.jdbc.PhoenixConnection; import org.apache.phoenix.query.QueryServices; @@ -185,9 +184,7 @@ public class PhoenixTable extends AbstractTable implements TranslatableTable { return new Statistic() { @Override public Double getRowCount() { -float f = pc.getQueryServices().getProps().getFloat( -PhoenixRel.ROW_COUNT_FACTOR, 1f); -return (double) (rowCount * f); +return (double) rowCount; } @Override http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java -- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java index 9d76f59..de9f0c2 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixAbstractAggregate.java @@ -105,6 +105,7 @@ abstract public class PhoenixAbstractAggregate extends Aggregate implements Phoe return planner.getCostFactory().makeInfiniteCost(); double rowCount = mq.getRowCount(this); +double bytesPerRow = mq.getAverageRowSize(this); if (isOrderedGroupBy) { rowCount = (rowCount * rowCount) / Util.nLogN(rowCount); } @@ -117,7 +118,7 @@ abstract public class PhoenixAbstractAggregate extends Aggregat
[2/2] phoenix git commit: PHOENIX-2090 Refine PhoenixTableScan.computeSelfCost() when scanRanges is available
PHOENIX-2090 Refine PhoenixTableScan.computeSelfCost() when scanRanges is available Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/8b68b1c4 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/8b68b1c4 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/8b68b1c4 Branch: refs/heads/calcite Commit: 8b68b1c4e8a68ac70c058e9d568d98af95073fc9 Parents: 751d134 Author: maryannxue Authored: Fri Feb 12 13:59:54 2016 -0500 Committer: maryannxue Committed: Fri Feb 12 13:59:54 2016 -0500 -- .../apache/phoenix/calcite/BaseCalciteIT.java | 102 .../org/apache/phoenix/calcite/CalciteIT.java | 234 ++- .../apache/phoenix/calcite/CalciteIndexIT.java | 155 ++-- .../apache/phoenix/calcite/PhoenixTable.java| 68 +- .../calcite/metadata/PhoenixRelMdSize.java | 75 ++ .../metadata/PhoenixRelMetadataProvider.java| 1 + .../calcite/rel/PhoenixAbstractSort.java| 16 +- .../calcite/rel/PhoenixCompactClientSort.java | 2 +- .../apache/phoenix/calcite/rel/PhoenixRel.java | 7 +- .../phoenix/calcite/rel/PhoenixServerJoin.java | 4 +- .../calcite/rel/PhoenixServerSemiJoin.java | 4 +- .../phoenix/calcite/rel/PhoenixTableScan.java | 86 +-- .../coprocessor/MetaDataEndpointImpl.java | 20 +- .../phoenix/schema/stats/StatisticsUtil.java| 18 +- .../phoenix/schema/stats/StatisticsWriter.java | 2 +- 15 files changed, 510 insertions(+), 284 deletions(-) -- http://git-wip-us.apache.org/repos/asf/phoenix/blob/8b68b1c4/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java b/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java index 9afddab..35c46e7 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/BaseCalciteIT.java @@ -32,6 +32,7 @@ import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; +import java.text.DecimalFormat; import java.util.Arrays; import java.util.List; import java.util.Map; @@ -39,6 +40,7 @@ import java.util.Properties; import org.apache.calcite.avatica.util.ArrayImpl; import org.apache.calcite.config.CalciteConnectionProperty; +import org.apache.phoenix.calcite.rel.PhoenixRel; import org.apache.phoenix.end2end.BaseClientManagedTimeIT; import org.apache.phoenix.query.QueryServices; import org.apache.phoenix.schema.TableAlreadyExistsException; @@ -59,8 +61,8 @@ public class BaseCalciteIT extends BaseClientManagedTimeIT { setUpTestDriver(new ReadOnlyProps(props.entrySet().iterator())); } -public static Start start(boolean materializationEnabled) { -return new Start(getConnectionProps(materializationEnabled)); +public static Start start(boolean materializationEnabled, float rowCountFactor) { +return new Start(getConnectionProps(materializationEnabled, rowCountFactor)); } public static Start start(Properties props) { @@ -308,7 +310,7 @@ public class BaseCalciteIT extends BaseClientManagedTimeIT { return connection; } -protected static Properties getConnectionProps(boolean enableMaterialization) { +protected static Properties getConnectionProps(boolean enableMaterialization, float rowCountFactor) { Properties props = new Properties(); props.setProperty( CalciteConnectionProperty.MATERIALIZATIONS_ENABLED.camelName(), @@ -316,6 +318,7 @@ public class BaseCalciteIT extends BaseClientManagedTimeIT { props.setProperty( CalciteConnectionProperty.CREATE_MATERIALIZATIONS.camelName(), Boolean.toString(false)); +props.setProperty(PhoenixRel.ROW_COUNT_FACTOR, Float.toString(rowCountFactor)); return props; } @@ -364,21 +367,13 @@ public class BaseCalciteIT extends BaseClientManagedTimeIT { PreparedStatement stmt = conn.prepareStatement( "UPSERT INTO " + NOSALT_TABLE_NAME + " VALUES(?, ?, ?, ?)"); -stmt.setInt(1, 1); -stmt.setInt(2, 2); -stmt.setInt(3, 3); -stmt.setInt(4, 4); -stmt.execute(); -stmt.setInt(1, 2); -stmt.setInt(2, 3); -stmt.setInt(3, 4); -stmt.setInt(4, 5); -stmt.execute(); -stmt.setInt(1, 3); -stmt.setInt(2, 4); -stmt.setInt(3, 5); -stmt.setInt(4, 6); -stmt.execute(); +for (int i = 0; i < 1000; i++) { +
[1/2] phoenix git commit: PHOENIX-2090 Refine PhoenixTableScan.computeSelfCost() when scanRanges is available
Repository: phoenix Updated Branches: refs/heads/calcite 751d134be -> 8b68b1c4e http://git-wip-us.apache.org/repos/asf/phoenix/blob/8b68b1c4/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java -- diff --git a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java index f200a24..3f0f754 100644 --- a/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java +++ b/phoenix-core/src/it/java/org/apache/phoenix/calcite/CalciteIndexIT.java @@ -55,62 +55,71 @@ public class CalciteIndexIT extends BaseCalciteIT { initATableValues(getOrganizationId(), null, url); initSaltedTables(index); initMultiTenantTables(index); -final Connection connection = DriverManager.getConnection(url); +Connection connection = DriverManager.getConnection(url); connection.createStatement().execute("CREATE " + index + " IF NOT EXISTS IDX1 ON aTable (a_string) INCLUDE (b_string, x_integer)"); connection.createStatement().execute("CREATE " + index + " IF NOT EXISTS IDX2 ON aTable (b_string) INCLUDE (a_string, y_integer)"); connection.createStatement().execute("CREATE " + index + " IF NOT EXISTS IDX_FULL ON aTable (b_string) INCLUDE (a_string, a_integer, a_date, a_time, a_timestamp, x_decimal, x_long, x_integer, y_integer, a_byte, a_short, a_float, a_double, a_unsigned_float, a_unsigned_double)"); connection.createStatement().execute("UPDATE STATISTICS ATABLE"); +connection.createStatement().execute("UPDATE STATISTICS " + NOSALT_TABLE_NAME); connection.createStatement().execute("UPDATE STATISTICS " + SALTED_TABLE_NAME); -connection.createStatement().execute("UPDATE STATISTICS IDX_" + SALTED_TABLE_NAME); -connection.createStatement().execute("UPDATE STATISTICS IDX1"); -connection.createStatement().execute("UPDATE STATISTICS IDX2"); -connection.createStatement().execute("UPDATE STATISTICS IDX_FULL"); +connection.createStatement().execute("UPDATE STATISTICS " + MULTI_TENANT_TABLE); +connection.close(); + +Properties props = new Properties(); +props.setProperty("TenantId", "10"); +connection = DriverManager.getConnection(url, props); +connection.createStatement().execute("UPDATE STATISTICS " + MULTI_TENANT_VIEW1); +connection.close(); + +props.setProperty("TenantId", "20"); +connection = DriverManager.getConnection(url, props); +connection.createStatement().execute("UPDATE STATISTICS " + MULTI_TENANT_VIEW2); connection.close(); } @Test public void testIndex() throws Exception { -start(true).sql("select * from aTable where b_string = 'b'") +start(true, 1000f).sql("select * from aTable where b_string = 'b'") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(ORGANIZATION_ID=[$1], ENTITY_ID=[$2], A_STRING=[$3], B_STRING=[$0], A_INTEGER=[$4], A_DATE=[$5], A_TIME=[$6], A_TIMESTAMP=[$7], X_DECIMAL=[$8], X_LONG=[$9], X_INTEGER=[$10], Y_INTEGER=[$11], A_BYTE=[$12], A_SHORT=[$13], A_FLOAT=[$14], A_DOUBLE=[$15], A_UNSIGNED_FLOAT=[$16], A_UNSIGNED_DOUBLE=[$17])\n" + "PhoenixTableScan(table=[[phoenix, IDX_FULL]], filter=[=($0, 'b')])\n") .close(); -start(true).sql("select x_integer from aTable") +start(true, 1000f).sql("select x_integer from aTable") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(X_INTEGER=[$4])\n" + "PhoenixTableScan(table=[[phoenix, IDX1]])\n") .close(); -start(true).sql("select a_string from aTable order by a_string") +start(true, 1000f).sql("select a_string from aTable order by a_string") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(A_STRING=[$0])\n" + "PhoenixTableScan(table=[[phoenix, IDX1]], scanOrder=[FORWARD])\n") .close(); -start(true).sql("select a_string from aTable order by organization_id") +start(true, 1000f).sql("select a_string from aTable order by organization_id") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerProject(A_STRING=[$2], ORGANIZATION_ID=[$0])\n" + "PhoenixTableScan(table=[[phoenix, ATABLE]], scanOrder=[FORWARD])\n") .close(); -start(true).sql("select a_integer from aTable order by a_string") +start(true, 1000f).sql("select a_integer from aTable order by a_string") .explainIs("PhoenixToEnumerableConverter\n" + " PhoenixServerSort(sort0=[$1], dir0=[ASC]