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

James Taylor commented on PHOENIX-3787:
---------------------------------------

This might be a duplicate of PHOENIX-3383. The (ugly) workaround for that was 
to reverse the > operator to be <. FWIW, if this is the same issue, then when 
PHOENIX-3383 is fixed, the operator would need to be switched back.

> RVC For Paged Queries not working as expected when PK leads with column 
> defined as 'DATE DESC'
> ----------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-3787
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3787
>             Project: Phoenix
>          Issue Type: Bug
>    Affects Versions: 4.9.0, 4.10.0
>            Reporter: Jan Fernando
>
> Our application supports paged queries that utilize RVCs. We have a table 
> where the PK leads with a column that is a DATE data type. The PK specifies 
> the sort order of the DATE PK column as DESC.
> The first query doesn't utilize an RVC but uses a limit to restrict the 
> number of records for first page:
> SELECT TO_CHAR(EVENTDATE, 'yyyy-MM-DD HH:mm:ss.SSS'), EVENTID, EVENTNAME FROM 
> TEST.EVENT_MT_VIEW ORDER BY EVENTDATE DESC, EVENTID LIMIT 3;
> We record the PK values of the last record returned and then issue a query 
> with an RVC to get the next page and so on:
> SELECT TO_CHAR(EVENTDATE, 'yyyy-MM-DD HH:mm:ss.SSS'), EVENTID, EVENTNAME
> FROM TEST.EVENT_MT_VIEW
> WHERE (EVENTDATE, EVENTID) > (TO_DATE('2017-01-28 20:38:00.000', 'yyyy-MM-dd 
> HH:mm:ss.SS'), 'event3')
> ORDER BY EVENTDATE DESC, EVENTID;
> We expect that the RVC clause will honor the sort order of the Date column 
> and page through the data in descending order. However this does not happen. 
> The greater than operator appears to be applied literally. and we return the 
> same set of data again, minus the last record.
> This breaks our query paging application and users can't page through their 
> data.
> We utilize a Multi-tenant connection and specify the 
> phoenix.query.force.rowkeyorder=true attribute on the connection. 
> You can repro this behavior with as follows:
> 1) Create table with Date Desc data type in PK
> ----------------------------------------------------------------
> CREATE TABLE IF NOT EXISTS TEST.EVENT (
>     ORGANIZATION_ID CHAR(15) NOT NULL,
>     EVENTDATE DATE NOT NULL,
>     EVENTID CHAR(15) NOT NULL,
>     EVENTNAME VARCHAR,
>     CONSTRAINT PK PRIMARY KEY 
>     (
>         ORGANIZATION_ID, 
>         EVENTDATE DESC,
>         EVENTID
>     )
> ) VERSIONS=1,MULTI_TENANT=true
> 2) Insert data into the table
> ------------------------------------
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 23:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event1', 'eventname1');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 22:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event2', 'eventname2');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 20:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event3', 'eventname3');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 19:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event4', 'eventname4');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 18:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event5', 'eventname5');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 17:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event6', 'eventname6');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 16:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event7', 'eventname7');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 15:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event8', 'eventname8');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 14:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event9', 'eventname9');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 13:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event10', 'eventname10');
> UPSERT INTO TEST.EVENT VALUES ('Tenant1', TO_DATE('2017-01-28 12:38:00.000', 
> 'yyyy-MM-dd HH:mm:ss.SSS'), 'event11', 'eventname11');
> 3) Create a Multi-tenant view using an MT connection with TenantId=Tenant1
> -------------------------
> CREATE VIEW TEST.EVENT_MT_VIEW AS SELECT * FROM TEST.EVENT;
> 4) Execute initial query - 3 rows returned
> --------------------------------------------------------
> SELECT TO_CHAR(EVENTDATE, 'yyyy-MM-DD HH:mm:ss.SSS'), EVENTID, EVENTNAME FROM 
> TEST.EVENT_MT_VIEW ORDER BY EVENTDATE DESC, EVENTID LIMIT 3;
> 5) Execute RVC query - expect remaining 8 rows returned, by first 2 are 
> returned again
> ---------------------
> SELECT TO_CHAR(EVENTDATE, 'yyyy-MM-DD HH:mm:ss.SSS'), EVENTID, EVENTNAME
> FROM TEST.EVENT_MT_VIEW
> WHERE (EVENTDATE, EVENTID) > (TO_DATE('2017-01-28 20:38:00.000', 'yyyy-MM-dd 
> HH:mm:ss.SS'), 'eventname3')
> ORDER BY EVENTDATE DESC, EVENTID;



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to