Cassandra忽略UPDATE CQL语句中的索引

时间:2013-07-18 17:55:24

标签: cassandra

我正在使用Cassandra 1.2.25和cqlsh,所有CQL语句都是CQL3。我正在创建一个CF,然后在列上添加一个二级索引。在我添加二级索引(如下所述:http://www.datastax.com/docs/1.1/ddl/indexes)后,我希望UPDATE语句能够使用WHERE子句中的二级索引列。可悲的是,他们没有。

  1. 创建表架构:

      

    CREATE TABLE注册表(    referencesetid uuid,    referenceid uuid,    acquire byendpoint uuid,    姓名文字,    PRIMARY KEY(referencesetid,referenceid)   )

  2. 添加了索引:

      

    CREATE INDEX nameidx ON注册表(名称);

  3. 插入一行:

      

    INSERT INTO注册表(referenceSetId,referenceId,acquiredByEndpoint,name)VALUES(96ade698-09c5-46f0-beb4-b842e5352bc8,a97c6163-f4bc-4eaf-a7e0-700578bdc44c,00000000-0000-0000-0000-000000000000,'John' );

  4. 执行更新查询(在WHERE子句中我指的是nameidx,因为这是索引字段'name'的名称):

      

    UPDATE注册表SET acquiredbyendpoint = 00000000-0000-0000-0000-000000000001 WHERE nameidx ='John'AND referencesetid = 36da89c3-f256-4d56-83c0-37569311a8a0;

  5. 错误:

      

    错误请求:未知密钥标识符nameidx

  6. 有没有人有任何建议我做错了什么?

    它可能不太明显(即配置文件或C *版本),因为C *索引文档在我看来很简单。

    干杯 保罗。

1 个答案:

答案 0 :(得分:4)

正如您在顶部所说,Cassandra不支持UPDATE,WHERE子句中的字段是索引字段。您只能使用主键字段进行更新。

此外,该字段仍称为名称,索引名称不用于索引查找。