phoenix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cameron Hatfield (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (PHOENIX-2271) Upsert - CheckAndPut like functionality
Date Tue, 22 Sep 2015 20:55:04 GMT

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

Cameron Hatfield commented on PHOENIX-2271:
-------------------------------------------

The other possible point of confusion is "HBase CAS is based on a single cell. How would you
see it extended to multiple cells?"

The patch [~babartareen] has made actually does multi-cell CAS, due to how rowlocks are acquired
in the coprocessor. So it is technically a more powerful extension of the built-in checkAndPut
operations provided by default HBase. This is vaguely mentioned in https://issues.apache.org/jira/browse/HBASE-8458

> Upsert - CheckAndPut like functionality
> ---------------------------------------
>
>                 Key: PHOENIX-2271
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-2271
>             Project: Phoenix
>          Issue Type: Improvement
>            Reporter: Babar Tareen
>         Attachments: patch.diff
>
>
> The Upsert statement does not support HBase's checkAndPut api, thus making it difficult
to conditionally update a row. Based on the comments from PHOENIX-6, I have implemented such
functionality. The Upsert statement is modified to support compare clause, which allows us
to pass in an expression. The expression is evaluated against the current record and Upsert
is only performed when the expression evaluates to true. More details [here|https://github.com/babartareen/phoenix].
> h4. Examples
> Given that the FirstName is always set for the users, create a user record if one doesn't
already exist.
> {code:sql}
> UPSERT INTO User (UserId, FirstName, LastName, Phone, Address, PIN) VALUES (1, 'Alice',
'A', '123 456 7890', 'Some St. in a city', 1122) COMPARE FirstName IS NULL;
> {code}
> Update the phone number for UserId '1' if the FirstName is set. Given that the FirstName
is always set for the users, this will only update the record if it already exists.
> {code:sql}
> UPSERT INTO User (UserId, Phone) VALUES (1, '987 654 3210') COMPARE FirstName IS NOT
NULL;
> {code}
> Update the phone number if the first name for UserId '1' starts with 'Al' and last name
is 'A'
> {code:sql}
> UPSERT INTO User (UserId, Phone) VALUES (1, '987 654 3210') COMPARE FirstName LIKE 'Al%'
AND LastName = 'A';  
> {code}



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

Mime
View raw message