[ https://issues.apache.org/jira/browse/KUDU-1945?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17711976#comment-17711976 ]
ASF subversion and git services commented on KUDU-1945: ------------------------------------------------------- Commit 3019848d00ac721b30d98a1aeb77bc205352b7b5 in kudu's branch refs/heads/master from Marton Greber [ https://gitbox.apache.org/repos/asf?p=kudu.git;h=3019848d0 ] KUDU-1945 Add C++ example for non-unique PK This patch adds an example based on Kudu C++ client API to showcase the main operations performed on a table having a non-unique primary key. STDOUT of the example: Created a client connection Created the schema: ( non_unique_key INT32 NOT NULL, auto_incrementing_id INT64 NOT NULL, int_val INT32 NOT NULL, PRIMARY KEY (non_unique_key, auto_incrementing_id) ) Created the table Inserted some row(s) into the table: (int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=3, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2) (int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=2) (int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=1) (int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=2) Demonstrating scanning ... Scanned some row(s) WHERE non_unique_key = 1: (int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=2) Demonstrating UPDATE ... Updated row(s) WHERE non_unique_key = 1 AND int_val = 2 to int_val = 98 (int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=3, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2) (int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98) (int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=1) (int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=2) Updated row(s) WHERE non_unique_key = 2 to int_val = 99 (int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=3, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2) (int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98) (int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=99) (int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=99) (int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=99) Updated row(s) WHERE non_unique_key = 2 AND auto_incrementing_id = 5 to\ int_val = 100 (int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=3, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2) (int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98) (int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=99) (int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=\ 100) (int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=99) Demonstrating DELETE ... Deleted row(s) WHERE non_unique_key = 3 AND int_val = 1 (int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2) (int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98) (int32 non_unique_key=2, int64 auto_incrementing_id=4, int32 int_val=99) (int32 non_unique_key=2, int64 auto_incrementing_id=5, int32 int_val=\ 100) (int32 non_unique_key=2, int64 auto_incrementing_id=6, int32 int_val=99) Deleted row(s) WHERE non_unique_key = 2 (int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=3, int64 auto_incrementing_id=3, int32 int_val=2) (int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98) Deleted row(s) WHERE non_unique_key = 3 AND auto_incrementing_id = 3 (int32 non_unique_key=3, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=4, int64 auto_incrementing_id=4, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=1, int32 int_val=0) (int32 non_unique_key=1, int64 auto_incrementing_id=2, int32 int_val=1) (int32 non_unique_key=1, int64 auto_incrementing_id=3, int32 int_val=98) Deleted the table Done Change-Id: I8c6be6bece56788dc858468d1fcccff6955836ec Reviewed-on: http://gerrit.cloudera.org:8080/19690 Tested-by: Alexey Serbin <ale...@apache.org> Reviewed-by: Alexey Serbin <ale...@apache.org> > Support generation of surrogate primary keys (or tables with no PK) > ------------------------------------------------------------------- > > Key: KUDU-1945 > URL: https://issues.apache.org/jira/browse/KUDU-1945 > Project: Kudu > Issue Type: New Feature > Components: client, master, tablet > Reporter: Todd Lipcon > Priority: Major > Labels: roadmap-candidate > > Many use cases have data where there is no "natural" primary key. For > example, a web log use case mostly cares about partitioning and not about > precise sorting by timestamp, and timestamps themselves are not necessarily > unique. Rather than forcing users to come up with their own surrogate primary > keys, Kudu should support some kind of "auto_increment" equivalent which > generates primary keys on insertion. Alternatively, Kudu could support tables > which are partitioned but not internally sorted. > The advantages would be: > - Kudu can pick primary keys on insertion to guarantee that there is no > compaction required on the table (eg always assign a new key higher than any > existing key in the local tablet). This can improve write throughput > substantially, especially compared to naive PK generation schemes that a user > might pick such as UUID, which would generate a uniform random-insert > workload (worst case for performance) > - Make Kudu easier to use for such use cases (no extra client code necessary) -- This message was sent by Atlassian Jira (v8.20.10#820010)