0

Cassandra がセカンダリ インデックスによる順序付けをサポートしていないことは理解していますが、機能による順序付けは本当に必要ありません。カサンドラはすでに列名をソートしているため、列ファミリーに格納されている昇順または降順で列を取得する機能だけが必要です。

カサンドラの時系列データを幅の広い行としてモデル化したいと思います。このデータに昇順または降順でアクセスする必要があります。また、選択クエリを実行するために、いくつかのセカンダリ インデックスを作成したいと考えています。したがって、私の列ファミリー at_data は次のようになります。

create table at_data (acct_bucket_id text,
             ... ts varint,
             ... status int,
             ... side int,
             ... instrument_id varint,
             ... data text,
             ... PRIMARY KEY (acct_bucket_id, ts, status, side, instrument_id)
             ... ) with comment = 'audit data';

この列ファミリーにデータを追加すると。

insert into at_data (acct_bucket_id, ts, status, side, instrument_id, data) values ('1:1', 1, 1, 1, 1, 'order 1');
insert into at_data (acct_bucket_id, ts, status, side, instrument_id, data) values ('1:1', 2, 1, 1, 1, 'order 2');
insert into at_data (acct_bucket_id, ts, status, side, instrument_id, data) values ('1:1', 3, 2, 1, 1, 'order 3');

ステータスが1に一致する降順で「データ」を取得したいので、クエリを作成しました.select * from at_data where acct_bucket_id='1:1' and status=1 order by ts desc;

エラーが発生しました、Bad Request: ORDER BY with 2ndary indexs is not supported.

どうすればこれを達成できますか?

ありがとう、シュリダール

4

1 に答える 1

1

主キーの前にあるため、クエリをselect * from at_data where acct_bucket_id = '1:1' and ts = 1 and status = 1 order by ts desc;スキップすることはできません。order by は主キーの 2 番目のキーのみを受け入れるため、order by はできません。tsstatusstatus

PRIMARY_KEY (acct_bucket_id, status, ts, side, instrument_id)主キーを-put statusbeforeに変更できますts。この場合、次のことができますselect * from at_data where acct_bucket_id='1:1' and status = 1 order by status desc;

于 2013-10-22T10:05:40.010 に答える