0

我知道 cassandra 不支持按二级索引排序,但我真的不希望按功能排序。我想要的只是能够以升序或降序获取存储在列族中的列,因为 cassandra 已经对列名进行了排序。

我想将 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 匹配的情况下按降序获取“数据”。所以我创建了查询,从 at_data 中选择 *,其中 acct_bucket_id='1:1' 和 status=1 order by ts desc;

并得到错误,Bad Request: ORDER BY with 2ndary index 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;你不能跳过ts你的查询,因为它status在主键之前。而且您不能订购,status因为订购仅接受主键的第二个键。

您可以将主键更改为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 回答