我不确定是否可以更改表中特定行的分区键值。例如,如果您有一个表,其中 PRIMARY KEY(name, title) 并且有一些条目,其中 name =“John”,title =“New”。我们能够运行吗:
UPDATE table
SET name="Ron"
WHERE name="John" AND title="New";
我了解分区键的一般概念,它可以唯一标识分区中的行,同时还标识哪些节点保存所述分区。所以这让我相信这不会运行。
最佳答案
So this leads to me to believe this would not run.
你是对的。对于 Cassandra,可以正确地说 UPDATE
和 INSERT
通常会执行相同的操作(在幕后)。但在本例中,情况并非如此。运行 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"
这是因为 UPDATE
对 WHERE
子句进行了额外检查。处理这种情况的最佳方法是使用新键重写该行,然后删除
旧行。
最好将这两个语句包装在一个 BATCH
中,以确保该条目不会由于其中一个失败而处于奇怪的状态。
BEGIN BATCH
INSERT INTO table (name,title) VALUES ('Ron','New');
DELETE FROM table WHERE name='John' AND title='New';
APPLY BATCH;
关于cassandra - 您可以更改 Cassandra 表中特定行的分区键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73533183/