You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@phoenix.apache.org by ma...@apache.org on 2016/02/13 03:43:26 UTC
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 <ma...@gmail.com>
Authored: Fri Feb 12 21:43:12 2016 -0500
Committer: maryannxue <ma...@gmail.com>
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, 1000000f).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 Aggregate implements Phoe
multiplier += 0.0125f;
}
}
- return planner.getCostFactory().makeCost(rowCount * multiplier, 0, 0);
+ return planner.getCostFactory().makeCost(rowCount * multiplier * bytesPerRow, 0, 0);
}
@Override
http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java
index 501060e..f6b0e97 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixRel.java
@@ -46,7 +46,7 @@ public interface PhoenixRel extends RelNode {
* <p>Multiply by the value (which is less than unity), and you will get a cheaper cost.
* Server is cheaper.
*/
- double SERVER_FACTOR = 0.1;
+ double SERVER_FACTOR = 0.2;
QueryPlan implement(Implementor implementor);
http://git-wip-us.apache.org/repos/asf/phoenix/blob/52ba5d24/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
----------------------------------------------------------------------
diff --git a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
index d9fa23f..0841006 100644
--- a/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
+++ b/phoenix-core/src/main/java/org/apache/phoenix/calcite/rel/PhoenixTableScan.java
@@ -73,6 +73,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
public final ScanRanges scanRanges;
protected final GuidePostsInfo filteredGuideposts;
+ protected final float rowCountFactor;
public static PhoenixTableScan create(RelOptCluster cluster, final RelOptTable table) {
return create(cluster, table, null,
@@ -100,6 +101,9 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
super(cluster, traits, table);
this.filter = filter;
this.scanOrder = scanOrder;
+ final PhoenixTable phoenixTable = table.unwrap(PhoenixTable.class);
+ this.rowCountFactor = phoenixTable.pc.getQueryServices()
+ .getProps().getFloat(PhoenixRel.ROW_COUNT_FACTOR, 1f);
ScanRanges scanRanges = null;
GuidePostsInfo info = null;
@@ -107,7 +111,6 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
if (filter != null) {
try {
// TODO simplify this code
- final PhoenixTable phoenixTable = table.unwrap(PhoenixTable.class);
PTable pTable = phoenixTable.getTable();
TableRef tableRef = new TableRef(CalciteUtils.createTempAlias(), pTable, HConstants.LATEST_TIMESTAMP, false);
// We use a implementor with a special implementation for field access
@@ -239,6 +242,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
} else {
byteCount = phoenixTable.byteCount;
}
+ byteCount *= rowCountFactor;
if (scanOrder != ScanOrder.NONE) {
// We don't want to make a big difference here. The idea is to avoid
// forcing row key order whenever the order is absolutely useless.
@@ -257,6 +261,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
}
return planner.getCostFactory()
.makeCost(byteCount, byteCount + 1, 0)
+ .multiplyBy(SERVER_FACTOR)
.multiplyBy(PHOENIX_FACTOR);
}
@@ -267,7 +272,7 @@ public class PhoenixTableScan extends TableScan implements PhoenixRel {
rows = rows * mq.getSelectivity(this, filter);
}
- return rows;
+ return rows * rowCountFactor;
}
@Override