You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kudu.apache.org by "Andrew Wong (Jira)" <ji...@apache.org> on 2022/02/18 23:36:00 UTC

[jira] [Commented] (KUDU-3353) Support setnx semantic on column

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

Andrew Wong commented on KUDU-3353:
-----------------------------------

Upon reading this first, I thought it sounded similar to INSERT_IGNORE, but letting it digest a bit, it seems a bit different since it deals with individual cells of an update row, rather than the entire row.

The tricky thing here, I think, is that we want to evaluate the value of an updated column before determining whether to apply the update. This is not something Kudu currently supports – we currently only check primary key presence before applying the row. And note that determining the old value may entail opening up several delta files. While note untenable (e.g., we still open delta files for the presence check to determine if a row was deleted), that is something that would need to be implemented as a part of this operation.

Another thought: would it make sense to introduce this as a new write op entirely, some SETNX (similar to INSERT_IGNORE), rather than a part of the schema?

> Support setnx semantic on column
> --------------------------------
>
>                 Key: KUDU-3353
>                 URL: https://issues.apache.org/jira/browse/KUDU-3353
>             Project: Kudu
>          Issue Type: New Feature
>          Components: api, server
>            Reporter: Yingchun Lai
>            Priority: Major
>
> h1. motivation
> In some usage scenarios, Kudu table has a column with semantic of "create time", which means it represent the create timestamp of the row. The other columns have the similar semantic as before, for example, the user properties like age, address, and etc.
> Upstream and Kudu user doesn't know whether a row is exist or not, and every cell data is the lastest ingested from, for example, event stream.
> If without the "create time" column, Kudu user can use UPSERT operations to write data to the table, every columns with data will overwrite the old data. But if with the "create time" column, the cell data will be overwrote by the following UPSERT ops, which is not what we expect.
> To achive the goal, we have to read the column out to judge whether the column is NULL or not, if it's NULL, we can fill the row with the cell, if not NULL, we will drop it from the data before UPSERT, to avoid overwite "create time".
> It's expensive, is there a way to avoid a read from Kudu?
> h1. Resolvation
> We can implement column schema with semantic of "update if null". That means cell data in changelist will update the base data if the latter is NULL, and will ignore updates if it is not NULL.
> So we can use Kudu similarly as before, but only defined the column as "update if null" when create table or add column.
>  



--
This message was sent by Atlassian Jira
(v8.20.1#820001)