[
https://issues.apache.org/jira/browse/PHOENIX-1580?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14340603#comment-14340603
]
Alicia Ying Shu commented on PHOENIX-1580:
------------------------------------------
I met an issue when I implemented Union All for aggregate functions. Your
insight is appreciated. For example:
Select count(*) from t1 union all Select count(*) from t2;
In PhonenixStatement.java
protected PhoenixResultSet executeQuery(final CompilableStatement stmt) throws
SQLException:
return CallRunner.run(
new CallRunner.CallableThrowable<PhoenixResultSet,
SQLException>() {
@Override
public PhoenixResultSet call() throws SQLException {
try {
boolean chainUnionRes = false;
QueryPlan plan =
stmt.compilePlan(PhoenixStatement.this, Sequence.ValueOp.RESERVE_SEQUENCE);
plan =
connection.getQueryServices().getOptimizer().optimize(
PhoenixStatement.this, plan);
// this will create its own trace internally, so we
don't wrap this
// whole thing in tracing
ResultIterator resultIterator = plan.iterator();
if (logger.isDebugEnabled()) {
String explainPlan =
QueryUtil.getExplainPlan(resultIterator);
logger.debug(LogUtil.addCustomAnnotations("Explain
plan: " + explainPlan, connection));
}
PhoenixResultSet rs = newResultSet(resultIterator,
plan.getProjector());
resultSets.add(rs);
setLastQueryPlan(plan);
setLastResultSet(rs);
setLastUpdateCount(NO_UPDATE);
setLastUpdateOperation(stmt.getOperation());
return rs;
} catch (RuntimeException e) {
We need to get ONE RowProject and I used the rowProjector of one of the
selects. When evaluating the result, the “aggregator” we get is the aggregator
for that one select which gives wrong result for other selects since the
aggregate value is cached for that Aggregator.
My workaround is to submit the query at the PhoenixStatement level and create
PhoenixResultSet for each individual Aggregate select and chain the result
sets. But it did not work for Union All with ORDER BY which needs all the
result sets together.
I have thought about the following, please give comments:
1. Associate each ResultIterator with its RowProjector for Union All so as to
evaluate result set with right RowProjector?
2. Any other better suggestions?
Thanks!
> Support UNION ALL
> -----------------
>
> Key: PHOENIX-1580
> URL: https://issues.apache.org/jira/browse/PHOENIX-1580
> Project: Phoenix
> Issue Type: Bug
> Reporter: Alicia Ying Shu
> Assignee: Alicia Ying Shu
> Attachments: unionall-wipe.patch
>
>
> Select * from T1
> UNION ALL
> Select * from T2
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)