[
https://issues.apache.org/jira/browse/PHOENIX-2271?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14908804#comment-14908804
]
Cameron Hatfield commented on PHOENIX-2271:
-------------------------------------------
For values:
Thanks for the link, answers the problems that I was unsure about.
The particular case I was mentioning isn't necessarily just count, but that the
statement can return the keys themselves that were updated / inserted /
deleted, generally used for finding out things such as what was already in the
table, what wasn't inserted cause it already existed, etc. The count itself is
also something that would be nice to have, and probably much easier to return
compared to actual rows. I have actually used this feature in TSQL the past,
though I can't remember if it was for anything more then counts. (Which I
believe is how TSQL got around the fact that you only return one count).
The next question would then be, can we get this patch in, with a limited
subset of merge implemented (a insert/update only merge, for values only), with
the assumption being that adding table support would be harder problem then
just the values that it is now, or should we wait on the longer-burn timeline
of calcite.
> 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)