Cassandra中CQL3表的删除操作
假设我使用CQL3创建了以下列族:Cassandra中CQL3表的删除操作,cassandra,cql,cql3,Cassandra,Cql,Cql3,假设我使用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'
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”执行删除操作。e、 g它不允许我执行此操作:
Delete from users where id ='key' and duration =1;
有人知道这方面的工作吗?我会非常感激的 听起来您的模式不适合您想要执行的操作。您应该首先确定要对数据执行的操作,然后设计一个支持该操作的模式
如果您的模式不支持您想要做的事情,它将永远不会成功。如果您更详细地描述您所做的事情,包括需要执行的操作类型,也许我们可以帮助您设计更好的模式。听起来您的模式不适合您想要执行的操作类型。您应该首先确定要对数据执行的操作,然后设计一个支持该操作的模式
如果您的模式不支持您想要做的事情,它将永远不会成功。如果您更详细地描述您所做的事情,包括需要执行的操作类型,也许我们可以帮助您设计更好的模式。是时候重新思考您的元模型了。尽量保持元模型的灵活性,以便支持所有此类操作。换句话说,元模型的复合键组合应该具有处理此类删除或更新相关查询的灵活性 现在来看您的示例,如果您想要更新freq列,那么首先您必须删除具有该freq值的行,然后重新插入适当的组合。尝试使用复合键组合删除该行,例如在您的示例中
delete from users where id ='key' AND freq= 3
然后你可以插入一个新的行。是时候重新思考你的元模型了。尽量保持元模型的灵活性,以便支持所有此类操作。换句话说,元模型的复合键组合应该具有处理此类删除或更新相关查询的灵活性 现在来看您的示例,如果您想要更新freq列,那么首先您必须删除具有该freq值的行,然后重新插入适当的组合。尝试使用复合键组合删除该行,例如在您的示例中
delete from users where id ='key' AND freq= 3
然后您可以插入新的一行。谢谢abhi;我将freq作为主键的唯一原因是我希望数据按w.r.t排序。但我明白你的意思;它解决了我的问题。这将为表创建很多墓碑,如果你做很多这样的操作,查询将随着时间的推移变得越来越慢,请注意这一点。谢谢abhi;我将freq作为主键的唯一原因是我希望数据按w.r.t排序。但我明白你的意思;它解决了我的问题。这将为表创建很多墓碑,如果你做很多这样的操作,查询将随着时间的推移变得越来越慢,请注意这一点。谢谢Theo的回复。我确实设计了模式来支持我的查询。我之所以将freq作为主键的一部分,是因为我想对我的表w.r.t freq进行排序,因为freq会随着时间的推移而更新;我也需要更新。谢谢西奥的回复。我确实设计了模式来支持我的查询。我之所以将freq作为主键的一部分,是因为我想对我的表w.r.t freq进行排序,因为freq会随着时间的推移而更新;我也需要更新它。