Cassandra IN условие для свойства отсортированных по времени данных - PullRequest
0 голосов
/ 01 ноября 2018

Учитывая, что у меня есть следующая структура данных

CREATE TABLE db(
year int,
day int,
deal_id text,
update_dt timestamp,
codes set<text>,
payload text,
PRIMARY KEY ((year, day), update_dt, deal_id)
) WITH CLUSTERING ORDER BY (update_dt DESC);

И следующие данные в нем

 year | day | update_dt                       | deal_id | codes           | payload
------+-----+---------------------------------+---------+-----------------+--------------
 2018 | 231 | 2018-10-30 11:21:59.001000+0000 |     abc |      {'a', 'c'} |   Hi 2 there
 2018 | 231 | 2018-10-30 11:21:59.001000+0000 |    abcd |      {'a', 'c'} | Hi 2 there 3
 2018 | 231 | 2018-10-30 11:21:59.001000+0000 |   abcde |      {'a', 'c'} | Hi 2 there 3
 2018 | 231 | 2018-10-30 11:21:59.001000+0000 |  abcdef | {'a', 'c', 'e'} | Hi 2 there 3

Можно ли ограничить результаты

select * from db where year=2018 and day=231 and update_dt < '2018-10-31T11:21:59.001+0000';

Так, чтобы я отображал только те, которые имеют определенные коды, скажем 'a' и 'e', ​​которые отображаются на одну запись с deal_id = abcdef?

Если этого нельзя достичь с помощью одной таблицы, как это сделать с двумя? Важно упорядочить по дате обновления и возможность ограничить его по дате.

1 Ответ

0 голосов
/ 01 ноября 2018

У вас может быть условие диапазона только в последнем столбце кластеризации вашего запроса. В вашей схеме таблицы вы не можете сделать это, потому что deal_id - после update_dt ...

Вы можете попытаться изменить определение таблицы, чтобы иметь первичный ключ, например:

PRIMARY KEY ((year, day), deal_id, update_dt)

в этом случае вы можете запросить как:

select * from db where year=2018 and day=231 and deal_id = 'abc' 
   and update_dt < '2018-10-31T11:21:59.001+0000';

или

select * from db where year=2018 and day=231 and deal_id in ('abc', 'def')
   and update_dt < '2018-10-31T11:21:59.001+0000';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...