[ 
https://issues.apache.org/jira/browse/PHOENIX-2171?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

James Taylor updated PHOENIX-2171:
----------------------------------
    Attachment: PHOENIX-2171_v2.patch

Updated patch with more testing. Please review, [~samarthjain], as I'd like to 
get this into a patch release ASAP. I've included DOUBLE/FLOAT DESC to the set 
of columns identified for tables that require upgrading.

> DOUBLE and FLOAT DESC are stored as ASC
> ---------------------------------------
>
>                 Key: PHOENIX-2171
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2171
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: James Taylor
>            Priority: Critical
>         Attachments: PHOENIX-2171.patch, PHOENIX-2171_v2.patch
>
>
> Our PDouble.getCodec().decodeDouble() and PFloat.getCodec().decodeFloat() 
> methods are updating the byte array in-place when the data is DESC which is a 
> big no-no as it essentially corrupts data. The end effect is that data which 
> is attempted to be stored as DESC is stored ASC instead, with the data 
> appearing as being corruprt. Not sure if this is always the case for ingest 
> paths, but a common UPSERT VALUES is impacted:
> {code}
> 0: jdbc:phoenix:localhost> create table dd (k double primary key desc);
> No rows affected (1.356 seconds)
> 0: jdbc:phoenix:localhost> upsert into dd values (1.0);
> 1 row affected (0.054 seconds)
> 0: jdbc:phoenix:localhost> upsert into dd values (2.0);
> 1 row affected (0.005 seconds)
> 0: jdbc:phoenix:localhost> select * from dd;
> +------------------------------------------+
> |                    K                     |
> +------------------------------------------+
> | -1.0000000000000004                      |
> | -2.000000000000001                       |
> +------------------------------------------+
> 2 rows selected (0.038 seconds)
> {code}
> Not sure how to fix this in terms of data that has already been written. One 
> potential solution is to switch the column to be ASC instead of DESC (since 
> that's how it is actually stored):
> {code}
> put 'SYSTEM.CATALOG', "\x00\x00DD\x00K", '0:SORT_ORDER', "\x80\x00\x00\x00"
> {code}
> And now the data is interpreted correctly:
> {code}
> 0: jdbc:phoenix:localhost> select * from dd;
> +------------------------------------------+
> |                    K                     |
> +------------------------------------------+
> | 1.0                                      |
> | 2.0                                      |
> +------------------------------------------+
> 2 rows selected (6.157 seconds)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to