Rah*_*hul 4 cql cassandra cql3
我有一张非常简单的桌子
cqlsh:hell> describe columnfamily info ;
CREATE TABLE info (
nos int,
value map<text, text>,
PRIMARY KEY (nos)
)
Run Code Online (Sandbox Code Playgroud)
以下是我尝试更新值的查询.
update info set value = {'count' : '0' , 'onget' : 'function onget(value,count) { count++ ; return {"value": value, "count":count} ; }' } where nos <= 1000 ;
Bad Request: Invalid operator LTE for PRIMARY KEY part nos
Run Code Online (Sandbox Code Playgroud)
我使用任何运算符来指定约束.它抱怨说操作员无效.我不确定我在这里做错了什么,根据cassandra 3.0 cql doc,有类似的更新查询.
以下是我的版本
[cqlsh 4.1.0 | Cassandra 2.0.3 | CQL spec 3.1.1 | Thrift protocol 19.38.0]
Run Code Online (Sandbox Code Playgroud)
我不知道,哪里出错了.
答案真的在我的评论中,但需要一些细节.要从评论中重申......
where子句的第一个谓词必须唯一地标识分区键.在您的情况下,由于主键只有一列,因此分区键==主键.
Cassandra无法对分区进行范围扫描.在CQL语言中,分区是一个潜在的宽存储行,由密钥唯一标识.在这种情况下,您的nos列中的值.分区键的值被散列到标记中,这些标记明确标识数据在集群中的位置.由于该哈希没有命令,因此Cassandra不能使用除了相等之外的任何运算符来将语句路由到正确的目的地.这不是可能被更新的主键索引,它是Cassandra中的基本分区机制.因此,您不能将不等式运算符用作谓词的第一个子句.您可以在后续子句中使用它们,因为已经识别了分区,现在您正在处理一组有序的列.