PHOENIX-2707 Differentiate between a table+family have zero guideposts from not having collected guideposts
Project: http://git-wip-us.apache.org/repos/asf/phoenix/repo Commit: http://git-wip-us.apache.org/repos/asf/phoenix/commit/e3a62026 Tree: http://git-wip-us.apache.org/repos/asf/phoenix/tree/e3a62026 Diff: http://git-wip-us.apache.org/repos/asf/phoenix/diff/e3a62026 Branch: refs/heads/calcite Commit: e3a62026cbfaf1eb7c50a35a8871e0f059d7d668 Parents: c25f887 Author: James Taylor <jamestay...@apache.org> Authored: Tue Feb 23 16:52:05 2016 -0800 Committer: James Taylor <jamestay...@apache.org> Committed: Tue Feb 23 16:52:05 2016 -0800 ---------------------------------------------------------------------- .../java/org/apache/phoenix/execute/AggregatePlan.java | 6 ++++-- .../java/org/apache/phoenix/execute/BaseQueryPlan.java | 11 +++++++++++ .../main/java/org/apache/phoenix/execute/ScanPlan.java | 7 +++++-- 3 files changed, 20 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/phoenix/blob/e3a62026/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java index 73a995c..a8a7dc5 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/AggregatePlan.java @@ -35,6 +35,7 @@ import org.apache.phoenix.expression.OrderByExpression; import org.apache.phoenix.expression.RowKeyExpression; import org.apache.phoenix.expression.aggregator.Aggregators; import org.apache.phoenix.iterate.AggregatingResultIterator; +import org.apache.phoenix.iterate.BaseResultIterators; import org.apache.phoenix.iterate.ConcatResultIterator; import org.apache.phoenix.iterate.DistinctAggregatingResultIterator; import org.apache.phoenix.iterate.FilterAggregatingResultIterator; @@ -48,7 +49,6 @@ import org.apache.phoenix.iterate.ParallelIterators; import org.apache.phoenix.iterate.ParallelScanGrouper; import org.apache.phoenix.iterate.PeekingResultIterator; import org.apache.phoenix.iterate.ResultIterator; -import org.apache.phoenix.iterate.ResultIterators; import org.apache.phoenix.iterate.SequenceResultIterator; import org.apache.phoenix.iterate.SerialIterators; import org.apache.phoenix.iterate.SpoolingResultIterator; @@ -197,12 +197,14 @@ public class AggregatePlan extends BaseQueryPlan { context.getScan().setAttribute(BaseScannerRegionObserver.GROUP_BY_LIMIT, PInteger.INSTANCE.toBytes(limit)); } } - ResultIterators iterators = statement.getHint().hasHint(HintNode.Hint.SERIAL) ? + BaseResultIterators iterators = statement.getHint().hasHint(HintNode.Hint.SERIAL) ? new SerialIterators(this, null, wrapParallelIteratorFactory(), scanGrouper) : new ParallelIterators(this, null, wrapParallelIteratorFactory()); splits = iterators.getSplits(); scans = iterators.getScans(); + estimatedSize = iterators.getEstimatedByteCount(); + estimatedRows = iterators.getEstimatedRowCount(); AggregatingResultIterator aggResultIterator; // No need to merge sort for ungrouped aggregation http://git-wip-us.apache.org/repos/asf/phoenix/blob/e3a62026/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java index 2aef7f7..0ee70ba 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/BaseQueryPlan.java @@ -108,6 +108,9 @@ public abstract class BaseQueryPlan implements QueryPlan { * immediately before creating the ResultIterator. */ protected final Expression dynamicFilter; + protected Long estimatedRows; + protected Long estimatedSize; + protected BaseQueryPlan( StatementContext context, FilterableStatement statement, TableRef table, @@ -127,6 +130,14 @@ public abstract class BaseQueryPlan implements QueryPlan { this.dynamicFilter = dynamicFilter; } + public Long getEstimatedRowCount() { + return this.estimatedRows; + } + + public Long getEstimatedByteCount() { + return this.estimatedSize; + } + @Override public Operation getOperation() { http://git-wip-us.apache.org/repos/asf/phoenix/blob/e3a62026/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java ---------------------------------------------------------------------- diff --git a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java index d51e6c8..4a5cb83 100644 --- a/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java +++ b/phoenix-core/src/main/java/org/apache/phoenix/execute/ScanPlan.java @@ -31,6 +31,7 @@ import org.apache.phoenix.compile.StatementContext; import org.apache.phoenix.coprocessor.BaseScannerRegionObserver; import org.apache.phoenix.coprocessor.ScanRegionObserver; import org.apache.phoenix.expression.Expression; +import org.apache.phoenix.iterate.BaseResultIterators; import org.apache.phoenix.iterate.ChunkedResultIterator; import org.apache.phoenix.iterate.ConcatResultIterator; import org.apache.phoenix.iterate.LimitingResultIterator; @@ -40,7 +41,6 @@ import org.apache.phoenix.iterate.ParallelIteratorFactory; import org.apache.phoenix.iterate.ParallelIterators; import org.apache.phoenix.iterate.ParallelScanGrouper; import org.apache.phoenix.iterate.ResultIterator; -import org.apache.phoenix.iterate.ResultIterators; import org.apache.phoenix.iterate.RoundRobinResultIterator; import org.apache.phoenix.iterate.SequenceResultIterator; import org.apache.phoenix.iterate.SerialIterators; @@ -195,7 +195,7 @@ public class ScanPlan extends BaseQueryPlan { boolean isOrdered = !orderBy.getOrderByExpressions().isEmpty(); boolean isSerial = isSerial(context, statement, tableRef, orderBy, limit, allowPageFilter); Integer perScanLimit = !allowPageFilter || isOrdered ? null : limit; - ResultIterators iterators; + BaseResultIterators iterators; if (isSerial) { iterators = new SerialIterators(this, perScanLimit, parallelIteratorFactory, scanGrouper); } else { @@ -203,6 +203,9 @@ public class ScanPlan extends BaseQueryPlan { } splits = iterators.getSplits(); scans = iterators.getScans(); + estimatedSize = iterators.getEstimatedByteCount(); + estimatedRows = iterators.getEstimatedRowCount(); + if (isOrdered) { scanner = new MergeSortTopNResultIterator(iterators, limit, orderBy.getOrderByExpressions()); } else {