使用 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”语句和“if-else-if”语句是不是相同?