You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@phoenix.apache.org by "James Taylor (JIRA)" <ji...@apache.org> on 2018/07/04 17:28:00 UTC

[jira] [Commented] (PHOENIX-4540) Client side evaluation of group by Expression in projection gives erroneous result

    [ https://issues.apache.org/jira/browse/PHOENIX-4540?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16532974#comment-16532974 ] 

James Taylor commented on PHOENIX-4540:
---------------------------------------

The problem is occurring if one GROUP BY expression is contained by another GROUP BY expression. For example, with {{SELECT k/v FROM T GROUP BY k/v, v}} we end up replacing the k/v in the SELECT expressions with an expression to access the first part of the returned row key and then mistakenly also replace just the v part with an expression to access the second part of the returned row key. To fix, try changing the processing in ExpressionCompiler.wrapGroupByExpression() to detect if the replacement expression already contains a RowKeyColumnExpression and don't do that wrapping. You could optimize this by only doing this extra processing if one GROUP BY expression is contained by another GROUP BY expression.

 

> Client side evaluation of group by Expression in projection gives erroneous result
> ----------------------------------------------------------------------------------
>
>                 Key: PHOENIX-4540
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-4540
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Ankit Singhal
>            Priority: Major
>         Attachments: PHOENIX-4540.patch, PHOENIX-4540_unittest.patch
>
>
> If the columns involved in projected expression are not present in "group by" clause, the client evaluation of the same expression will give an erroneous result because of the absence of involved column value.
> Following queries will produce wrong result
> >select round(k/v,0) x from round_test group by x,v 
> >select k/v x from round_test group by x,v 
> but query runs fine if we add all columns so that client expression can be evaluated
> >select round(k/v,0) x from round_test group by x,k,v //will produce right result
> >select k/v x from round_test group by x,k,v; 
> Why we need to re-evaluate the expression here, can't we use the same result evaluated at server side during the "group by" 
> thoughts [~jamestaylor]?



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)