您能更改Cassandra表中特定行的分区键吗?

mwecs4sa  于 2022-09-27  发布在  Cassandra
关注(0)|答案(2)|浏览(104)

我不确定您是否可以更改表中特定行的分区键值。例如,如果您有一个表,其中PRIMARY KEY(name,title)和一些条目,其中name=“John”,title=“New”。我们能否运行:

UPDATE table
SET name="Ron"
WHERE name="John" AND title="New";

我理解分区键的一般概念,这样它可以唯一地标识分区中的行,同时还可以标识包含所述分区的节点。所以这让我相信这不会发生。

oipij1gg

oipij1gg1#

所以这让我相信这不会发生。
你说得对。对于Cassandra,可以正确地说UPDATEINSERT通常做相同的事情(在引擎盖下)。然而,在这种情况下,情况并非如此。运行UPDATE语句将生成以下消息:

> UPDATE table SET name='Ron' WHERE name='John' AND title='New';
InvalidRequest: Error from server: code=2200 [Invalid query] message="PRIMARY KEY part name found in SET part"

这是因为UPDATEWHERE子句有额外的检查。处理这种情况的最佳方法是使用新键重写行,然后DELETE重写旧行。
最好将这两个语句 Package 在BATCH中,以确保条目不会因为其中一个失败而以奇怪的状态结束。

BEGIN BATCH
    INSERT INTO table (name,title) VALUES ('Ron','New');
    DELETE FROM table WHERE name='John' AND title='New';
APPLY BATCH;
ymdaylpp

ymdaylpp2#

无法更改Cassandra中某行的分区键。
分区键唯一标识表中的分区。将分区键视为记录ID。不可能更改分区的分区键,因为它更像标识实际数据在集群中存储位置的元数据。
一个简单的类比就是你家的地址。您的地址(分区键)是定位您的房子(分区或数据)的唯一标识符。如果你改变了地址,那么它将识别出一个完全不同的房子,而不是你的房子。除非你已经搬家,否则把地址改成你家是没有意义的。
如果试图运行发布的示例查询,则会收到一个错误,指示SET子句中包含一个无效的主键列。干杯

相关问题