使用 IF NOT EXISTS 使用主键和聚类列进行唯一插入

Posted

技术标签:

【中文标题】使用 IF NOT EXISTS 使用主键和聚类列进行唯一插入【英文标题】:UNIQUE inserts with primary key and clustering column using IF NOT EXISTS 【发布时间】:2018-03-24 19:26:59 【问题描述】:

我是 Cassandra 的新手。鉴于我希望能够按 account_id 排序,唯一插入如何工作?

例如

INSERT INTO 测试(电子邮件、活动、帐户 ID、密码、姓名、电话)值(?、?、?、?、?、?)如果不存在

我会假设如果电子邮件已经存在于数据库中,我会收到“应用错误”。但是,如果电子邮件存在并且 account_id 不同,我会发现另一行插入到数据库中。

当存在主键和聚类列时,如何使用 IF NOT EXISTS 执行 LWT。我只希望仅在主键不存在时才应用插入。我不希望逻辑包含主键 + 聚类列。

CREATE TABLE test.testing (
    email text,
    account_id uuid,
    password text,
    name frozen <name>,
    active boolean,
    phone map<text, frozen <phone>>,
    PRIMARY KEY ((email), account_id);

【问题讨论】:

【参考方案1】:

对于您在帖子中提到的用例,您只希望每个电子邮件 ID 有一行。

如果这是您想要的,那么您必须从主键中删除 account_id。

因此,电子邮件将仅是您架构中的 partition_key 。

Cassandra 不支持对非聚类列进行排序,因此要按 account_id 对查询进行排序,您可以在此基础上使用用户 spark,也可以在后端进行排序。

【讨论】:

这是有道理的。如果您正在使用成为主键一部分的集群列,请明确说明。

以上是关于使用 IF NOT EXISTS 使用主键和聚类列进行唯一插入的主要内容,如果未能解决你的问题,请参考以下文章

if--else 嵌套 怎么理解?

对于互斥条件,多个“if”语句和“if-else-if”语句是不是相同?

html 基本IF,IF - ELSE和IF - ELSE IF - ELSE语句。

shell if else if

利用if函数计算个人所得税

java,if else和if else if else区别?