我在卡桑德拉桌子下面。
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)部分,因为每次我插入新值时它将创建新行。
对此有所帮助。 谢谢