1

cqlsh で Cassandra 1.2.25 を使用しており、すべての CQL ステートメントは CQL3 です。CF を作成してから、列にセカンダリ インデックスを追加します。セカンダリ インデックスを追加した後 (ここで説明されているように: http://www.datastax.com/docs/1.1/ddl/indexes )、UPDATE ステートメントが WHERE 句でセカンダリ インデックス列を使用できると予想します。悲しいことに、そうではありません。

  1. テーブル スキーマを作成しました:

    CREATE TABLE レジストリ ( referencesetid uuid、referenceid uuid、 acquiredbyendpoint uuid、名前テキスト、PRIMARY KEY (referencesetid、referenceid) )

  2. インデックスを追加しました:

    CREATE INDEX nameidx ON レジストリ (名前);

  3. 1行挿入しました:

    INSERT INTO レジストリ (referenceSetId,referenceId,acquiredByEndpoint,name) VALUES(96ade698-09c5-46f0-beb4-b842e5352bc8,a97c6163-f4bc-4eaf-a7e0-700578bdc44c,00000000-0000-0000-0000-000000'John0);

  4. 更新クエリの実行 (WHERE 句では、これはインデックス付きフィールド 'name' の名前であるため、nameidx を参照しています):

    UPDATE レジストリ SET acquirebyendpoint=00000000-0000-0000-0000-000000000001 WHERE nameidx='John' AND referencesetid=36da89c3-f256-4d56-83c0-37569311a8a0;

  5. エラー :

    不正な要求: 不明なキー識別子 nameidx

誰かが私が間違っていることを提案していますか?

C* インデックスのドキュメントは私には分かりやすいように見えるので、あまり明白ではないもの (つまり、構成ファイルまたは C* バージョン) かもしれません。

乾杯ポール。

4

1 に答える 1

4

上で述べたように、Cassandra は WHERE 句のフィールドがインデックス付きフィールドである UPDATE をサポートしていません。主キー フィールドでのみ UPDATE を実行できます。

また、フィールドは引き続き name と呼ばれ、インデックス名はインデックス ルックアップでは使用されません。

于 2013-07-18T18:31:14.223 に答える