Запросы Cassandra Range для значений карты с использованием отметки времени - PullRequest
0 голосов
/ 15 января 2019

У меня под таблицей Кассандры.

 create table person( 
   id int PRIMARY KEY,  
   name text, 
   imp_dates map<text,timestamp>
 );

Данные вставлены как показано ниже

insert into person(id,name,imp_dates) values(1,'one',{'birth':'1982-04-01','marriage':'2018-04-01'});
insert into person(id,name,imp_dates) values(2,'two',{'birth':'1980-04-01','marriage':'2010-04-01'});
insert into person(id,name,imp_dates) values(3,'three',{'birth':'1980-04-01','graduation':'2012-04-01'});

 id | name  | imp_dates
----+-------+-----------------------------------------------------------------------------------------------
  1 |   one |   {'birth': '1982-03-31 18:30:00.000000+0000', 'marriage': '2018-03-31 18:30:00.000000+0000'}
  2 |   two |   {'birth': '1980-03-31 18:30:00.000000+0000', 'marriage': '2010-03-31 18:30:00.000000+0000'}
  3 | three | {'birth': '1980-03-31 18:30:00.000000+0000', 'graduation': '2012-03-31 18:30:00.000000+0000'}

У меня есть требование написать запрос, как показано ниже. Требуемый диапазон в столбце значений карты.

 select id,name,imp_dates from person where id =1 and imp_dates['birth'] < '2000-04-01';

Я получаю следующую ошибку

 Error from server: code=2200 [Invalid query] message="Only EQ relations are supported on map entries"

Возможное решение, о котором я могу подумать:

1) Сделать карту плоской на несколько столбцов, а затем сделать ее частью первичного ключа. это будет работать, но не будет гибким, поскольку мне, возможно, придется изменить схему

2) Я могу создать другую таблицу person_id_by_important_dates для замены Map, но затем я теряю согласованность чтения, так как мне приходится читать из двух таблиц и объединяться.

Я не хочу включать часть первичного ключа imp_dates (map), поскольку он будет создавать новую строку каждый раз, когда я вставляю новые значения.

Ценю помощь в этом. Спасибо

...