2

Cassandra python ドライバー マッパー、cqlengine を使用して、マップ コレクションを使用してモデルを作成する場合、マップ値にインデックスを作成することしかできないようです

class Foo(Model):
    id = columns.UUID(partition_key=True)
    time_id = columns.UUID(primary_key=True, clustering_order='DESC')
    bar = columns.Map(columns.Ascii(), columns.Double(), index=True)

次のようなテーブルになります

cqlsh:baz> DESCRIBE foo;
    CREATE TABLE bar.asset_metric (
        id uuid,
        time_id timeuuid,
        bar map<ascii, double>,
        PRIMARY KEY (id, time_id)
    ) WITH CLUSTERING ORDER BY (time_id DESC)
CREATE INDEX index_foo_bar ON baz.foo (values(bar));

代わりに、cqlengine にマップ キーにインデックスを作成させるにはどうすればよいですか?

4

1 に答える 1

1

リチャード、現在、マップ キーのインデックス作成は cqlengine ではサポートされていません。実行される cql インデックス クエリを作成するコードは、興味がある場合はここにあります。

https://github.com/datastax/python-driver/blob/master/cassandra/cqlengine/management.py#L197-L201

これは、実行される cql ステートメントから行われます。の行に沿ってクエリを形成します。

CREATE INDEX index_name_here ON keyspace.model_name_here ("map_name_here").

デフォルトでは、これは値にインデックスを付けます。KEYS プレフィックスを使用して、純粋な cql でマップのキーにインデックスを付ける方法があります。

そのクエリは次のようになります。 CREATE INDEX index_name_here ON keyspace.model_name_here(KEYS(map_name_here));

コレクションのインデックス作成について詳しくは、このブログ投稿をご覧ください。 http://www.datastax.com/dev/blog/cql-in-2-1

残念ながら、その機能は cqlengine ではまだサポートされていません。ベース ドライバーにドロップし、cql を直接使用してそのタイプのインデックスを作成する必要があります。

于 2016-02-18T22:37:58.437 に答える