假设我使用CQL3创建了以下列族:
CREATE TABLE users (
id text,
freq int,
duration bigint,
PRIMARY KEY (id, freq)
)with clustering order by (freq desc);
我在其中插入了一些数据,例如:
Row(id=u'key', freq=3, duration=1)
Row(id=u'key', freq=4, duration=2)
Row(id=u'key', freq=5, duration=4)
Row(id=u'key', freq=6, duration=6)
现在我想进行更新操作。确切地说,我想更新上面给出的特定行的'freq'值。由于CQL3不允许我直接更新主键部分;我必须首先删除该条目,然后再次插入。但问题是它不允许我使用非分区键列'duration'执行删除操作。例如它不允许我执行此操作:
Delete from users where id ='key' and duration =1;
有没有人知道这方面的工作?我真的很感激。
答案 0 :(得分:2)
听起来您的架构不适合您想要执行的操作。您应该首先确定要对数据执行的操作,然后设计支持它的模式。
如果您的架构不支持您想要执行的操作,它将永远无法解决。如果您更详细地描述了它的作用,包括您需要执行的操作类型,我们可以帮助您设计更好的模式。
答案 1 :(得分:2)
它的时间重新思考你的元模型。尽量保持元模型的灵活性,以支持所有这类操作。换句话说,元模型的复合键组合应该具有处理此类删除或更新相关查询的灵活性。
现在,如果您想更新 freq 列,请转到您的示例,然后首先必须删除具有该freq值的行,然后重新插入正确的组合。尝试使用复合键组合删除行,例如在您的情况下,
delete from users where id ='key' AND freq= 3
然后你可以插入一个新的新行。