[
https://issues.apache.org/jira/browse/PHOENIX-4283?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16205268#comment-16205268
]
Ethan Wang commented on PHOENIX-4283:
-------------------------------------
Yes, when cut off happens, the "actualType" is Decimal, "this" is BigInt. The
"actualType" is pass from RowKeyColumnExpression.fromType, which is Decimal in
nested groupby. So, as comparison, in RowKeyColumnExpression,
logic : type.coerceBytes(ptr, fromType);
*nested*: BIGINT.coerceBytes(ptr, DECIMAL);
*normal*: BIGINT.coerceBytes(ptr, BIGINT);
I think the issue may be that, in PLong, coerceBytes() is override *regardless*
the "actualType", before passing into super.coerceBytes(). Therefore, the cut
off get executed always.
{code} @Override
public void coerceBytes(ImmutableBytesWritable ptr, Object object,
PDataType actualType,
Integer maxLength, Integer scale, SortOrder actualModifier, Integer
desiredMaxLength, Integer desiredScale,
SortOrder expectedModifier) {
// Decrease size of TIMESTAMP to size of LONG and continue coerce
if (ptr.getLength() > getByteSize()) {
ptr.set(ptr.get(), ptr.getOffset(), getByteSize());
}
super.coerceBytes(ptr, object, actualType, maxLength, scale,
actualModifier, desiredMaxLength,
desiredScale, expectedModifier);
}
{code}
> Group By statement truncating BIGINTs
> -------------------------------------
>
> Key: PHOENIX-4283
> URL: https://issues.apache.org/jira/browse/PHOENIX-4283
> Project: Phoenix
> Issue Type: Bug
> Affects Versions: 4.11.0
> Reporter: Steven Sadowski
> Assignee: Ethan Wang
> Fix For: 4.12.1
>
>
> *Versions:*
> Phoenix 4.11.0
> HBase: 1.3.1
> (Amazon EMR: 5.8.0)
> *Steps to reproduce:*
> 1. From the `sqlline-thin.py` client setup the following table:
> {code:sql}
> CREATE TABLE test_table (
> a BIGINT NOT NULL,
> c BIGINT NOT NULL
> CONSTRAINT PK PRIMARY KEY (a, c)
> );
> UPSERT INTO test_table(a,c) VALUES(4444444444444444444, 5555555555555555555);
> SELECT a FROM (SELECT a, c FROM test_table GROUP BY a, c) GROUP BY a, c;
> {code}
> *Expected Result:*
> {code:sql}
> +----------------------+
> | A |
> +----------------------+
> | 4444444444444444444 |
> +----------------------+
> {code}
> *Actual Result:*
> {code:sql}
> +----------------------+
> | A |
> +----------------------+
> | 4444444444444000000 |
> +----------------------+
> {code}
> *Comments:*
> Having the two Group By statements together seems to truncate the last 6 or
> so digits of the final result. Removing the outer (or either) group by will
> produce the correct result.
> Please fix the Group by statement to not truncate the outer result's value.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)