1

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

  1. 创建了表架构:

    CREATE TABLE registry (referencesetid uuid, referenceid uuid, acquirebyendpoint uuid, name text, PRIMARY KEY (referencesetid, referenceid) )

  2. 添加了索引:

    CREATE INDEX nameidx ON registry (name);

  3. 插入一行:

    插入注册表(referenceSetId,referenceId,acquiredByEndpoint,名称)值(96ade698-09c5-46f0-beb4-b842e5352bc8,a97c6163-f4bc-4eaf-a7e0-700578bdc44c,00000000-0000-0000-0000-00000);

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

    更新注册表SET acquirebyendpoint=00000000-0000-0000-0000-000000000001 其中nameidx='John' AND referencesetid=36da89c3-f256-4d56-83c0-37569311a8a0;

  5. 错误 :

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

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

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

干杯保罗。

4

1 回答 1

4

正如您在顶部所说,Cassandra 不支持 UPDATE ,其中 WHERE 子句中的字段是索引字段。您只能对主键字段执行 UPDATE。

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

于 2013-07-18T18:31:14.223 回答