Cassandra,如果集合包含值则删除
Cassandra, Delete if a set contains value
我是 Cassandra 的初学者,我有一个 table 这样的:
CREATE TABLE Books(
Title text PRIMARY KEY,
Authors set<text>,
Family set <text>,
Publisher text,
Price decimal
);
(其他选项都没有,因为它只是一个例子)
现在我想执行这个查询:
DELETE Price FROM Books WHERE Authors CONTAINS 'J.K. Rowling' IF EXISTS;
但是没用。我在 Google 上进行了搜索,但一无所获。
希望有人能帮助我,如果我的英语不是很好,请见谅。
but it doesn't work.
这并没有真正为我们提供足够的信息来帮助您。通常,您需要提供一条错误消息。我在本地构建了您的 table,插入了数据,并尝试了您的方法。这是我看到的错误:
InvalidRequest: Error from server: code=2200 [Invalid query]
message="Some partition key parts are missing: title"
DELETE
要求在 WHERE
子句中指定适当的 PRIMARY KEY 组件。在您的情况下,Authors
是 PRIMARY KEY 定义的 而不是 的一部分。鉴于返回的错误消息(和 table 定义),指定 title
是从此 table.
中删除行的唯一方法
aploetz@cqlsh:Whosebug> DELETE FROM Books
WHERE title = 'Harry Potter and the Chamber of Secrets'
IF EXISTS;
[applied]
-----------
True
Can I do a query like this? UPDATE Books SET Family = Family + {'Fantasy'} WHERE Authors CONTAINS 'J.K. Rowling';
没有。出于同样的原因,这失败了。在 Cassandra 中写入(INSERT、UPDATE、DELETE 都是写入)需要 WHERE
子句中的主键(特别是分区键)。没有它,Cassandra 无法确定哪个节点保存数据,它需要那个节点来执行写入。
我是 Cassandra 的初学者,我有一个 table 这样的:
CREATE TABLE Books(
Title text PRIMARY KEY,
Authors set<text>,
Family set <text>,
Publisher text,
Price decimal
);
(其他选项都没有,因为它只是一个例子)
现在我想执行这个查询:
DELETE Price FROM Books WHERE Authors CONTAINS 'J.K. Rowling' IF EXISTS;
但是没用。我在 Google 上进行了搜索,但一无所获。
希望有人能帮助我,如果我的英语不是很好,请见谅。
but it doesn't work.
这并没有真正为我们提供足够的信息来帮助您。通常,您需要提供一条错误消息。我在本地构建了您的 table,插入了数据,并尝试了您的方法。这是我看到的错误:
InvalidRequest: Error from server: code=2200 [Invalid query]
message="Some partition key parts are missing: title"
DELETE
要求在 WHERE
子句中指定适当的 PRIMARY KEY 组件。在您的情况下,Authors
是 PRIMARY KEY 定义的 而不是 的一部分。鉴于返回的错误消息(和 table 定义),指定 title
是从此 table.
aploetz@cqlsh:Whosebug> DELETE FROM Books
WHERE title = 'Harry Potter and the Chamber of Secrets'
IF EXISTS;
[applied]
-----------
True
Can I do a query like this?
UPDATE Books SET Family = Family + {'Fantasy'} WHERE Authors CONTAINS 'J.K. Rowling';
没有。出于同样的原因,这失败了。在 Cassandra 中写入(INSERT、UPDATE、DELETE 都是写入)需要 WHERE
子句中的主键(特别是分区键)。没有它,Cassandra 无法确定哪个节点保存数据,它需要那个节点来执行写入。