Кассандра: получить столбцы широкого ряда в обратном порядке с некоторой фильтрацией

Я понимаю, что Кассандра не поддерживает упорядочение по вторичным индексам, но я действительно не хочу упорядочивать по признакам. Все, что мне нужно, - это возможность получать столбцы в порядке возрастания или убывания, как они хранятся в семействе столбцов, поскольку 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' и статус =1 порядок по ts desc;

и получил ошибку, Bad Request: ORDER BY со вторыми индексами не поддерживается.

Как мне этого добиться?

Спасибо, Шридхар

1 ответ

Ты можешь сделать select * from at_data where acct_bucket_id = '1:1' and ts = 1 and status = 1 order by ts desc; Вы не можете пропустить ts в вашем запросе, потому что он идет раньше status в первичном ключе. И вы не можете заказать по status потому что order by принимает только второй ключ первичного ключа.

Вы можете изменить свой первичный ключ на PRIMARY_KEY (acct_bucket_id, status, ts, side, instrument_id) - положил status до ts, В этом случае вы можете сделать select * from at_data where acct_bucket_id='1:1' and status = 1 order by status desc;

Другие вопросы по тегам