cassandra - 您可以更改 Cassandra 表中特定行的分区键吗?

标签 cassandra cql datastax-enterprise

我不确定是否可以更改表中特定行的分区键值。例如,如果您有一个表,其中 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,可以正确地说 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 子句进行了额外检查。处理这种情况的最佳方法是使用新键重写该行,然后删除旧行。

最好将这两个语句包装在一个 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/

相关文章:

cassandra - 只允许 super 用户执行 CREATE USER 查询

select - Cassandra 错误 - 仅当分区键受 EQ 或 IN 限制时才支持 Order By

solr - DSE/Solr : Cannot record QUEUE latency

cassandra - 压缩期间的 FileNotFoundException

java - 线程安全 Hector 查询

cassandra - 如何使用更新查询更新 cassandra 中的聚类键?

sql - 使用 Spark SQL 跳过/获取

arguments - 如何在 CQL 命令中包含输入参数 - 源

linux - 脚本手动工作正常但无法在 crontab 上工作

java - 如何使用来自datastax的java api从语句中获取精确的cql