【问题标题】:Cassandra table with all fields as PK所有字段为 PK 的 Cassandra 表
【发布时间】:2016-01-03 05:17:01
【问题描述】:

我对 Cassandra 还是很陌生,除了已经存在的表(例如,将 PK 作为 item_id 的项目)之外,我正在尝试创建一些帮助表,以便能够通过不同的字段进行查询。

例如:

CREATE TABLE IF NOT EXISTS items_ids_by_field1_and_field2(
  item_id TEXT,
  field1  TEXT,
  field2  TEXT,

  PRIMARY KEY ((field1, field2), item_id));

INSERT 工作正常,但是当我想对该表执行 UPDATE 时出现问题,因为所有字段都是 PK 的一部分。

有什么办法可以解决这个问题?谢谢。

【问题讨论】:

  • 所有列都包含主键有点不寻常的用例,这样做的主要原因是什么?

标签: cassandra cql


【解决方案1】:

你不能 UPDATE 一个所有列都是主键的行的原因是因为 Cassandra 不允许你更改主键的值,因为你实际上将完全引用不同的行作为主键key 是如何唯一标识行。

如果您希望所有列都成为主键的一部分并且想要更改其中的一个,您可以做的是先删除现有行,然后插入新数据。由于您需要所有列进行任何更改(因为它们都创建主键)使用 INSERT 而不是 UPDATE 很好:

DELETE FROM items_ids_by_field1_and_field2 where field1='X' and field2='Y' and item_id='Z'
INSERT INTO items_ids_by_field1-and_field2 (field1, field2, item_id) values ('X', 'Y', 'A')

将完成您需要做的事情。如果 'X', 'Y', 'Z' 不存在,这对 Cassandra 来说不是问题。

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 2020-04-18
    • 2012-03-02
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多