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

James Taylor updated PHOENIX-4552:
----------------------------------
    Summary: Allow ROW_TIMESTAMP declaration for non PK column  (was: Add 
support for a ROW_TIMESTAMP that doesn't affect the primary key)

> Allow ROW_TIMESTAMP declaration for non PK column
> -------------------------------------------------
>
>                 Key: PHOENIX-4552
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-4552
>             Project: Phoenix
>          Issue Type: New Feature
>            Reporter: Stephen Petschulat
>            Priority: Minor
>
> By declaring a ROW_TIMESTAMP constraint on a Phoenix table, it does two 
> things 1) expose the hbase native timestamp as this column and 2) prepend 
> your primary key with this timestamp as well.
> It would be useful to have a similar feature that only exposes the hbase 
> native timestamp. This would allow explicit setting of the timestamp when 
> upserting data while allowing multiple hbase versions. It is possible to then 
> query for that specific key and version(s).
> Potential approach:
> {code:sql}
> CREATE TABLE COMMENTS (
>    COMMENT_ID INT NOT NULL,
>    REVISION_NUM BIGINT NOT NULL ROW_TIMESTAMP,    // NEW use of keyword
>    COMMENT_BODY TEXT
>    CONSTRAINT PK PRIMARY KEY(COMMENT_ID))
> UPSERT INTO COMMENTS (123, 1, 'edit 1 comment')
> UPSERT INTO COMMENTS (123, 2, 'edit 2 of comment')
> UPSERT INTO COMMENTS (123, 3, 'edit 3 of comment')
> {code}
>  
> Current behavior of ROW_TIMESTAMP would create a new primary for each upsert, 
> so querying by primary key is no longer straightforward when you don't know 
> the version number at query time. 
> {code:sql}
> SELECT * FROM COMMENTS WHERE COMMENT_ID = 123  // => returns most recent 
> version 'edit 3 of comment'
> SELECT * FROM COMMENTS WHERE COMMENT_ID = 123 AND REVISION_NUM = 1   // => 
> returns explicit version 'edit 1 comment'
> {code}
>  
> It can also be useful to return multiple versions (related: PHOENIX-590)
> {code:sql}
> SELECT * FROM COMMENTS WHERE COMMENT_ID = 123 AND REVISION_NUM < 3   // => 
> returns 2 rows
> {code}
>  
> Or just the highest version less than or equal to a particular version 
> (allowing snapshot queries):
> {code:sql}
> // set CurrentSCN=2 on connection
> SELECT * FROM COMMENTS WHERE COMMENT_ID = 123 // => returns 'edit 2 of 
> comment'
> {code}
> CurrentSCN already allows this type of snapshot query but not against an 
> explicitly set timestamp with multiple versions. The primary key injection 
> prevents this. The above query would behave similar to:
> {code:java}
> scan 'COMMENTS', {TIMERANGE => [0, <maxversionid+1>]}
> {code}
>  This returns the highest versioned value for each key that is less than a 
> specified maximum version number.
>  
>  



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

Reply via email to