时间排序数据的属性的Cassandra IN条件

时间:2018-11-01 11:10:13

标签: cassandra

鉴于我具有以下数据结构

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 :(得分:0)

您可能仅在查询的最后一个聚类列上具有范围条件。在表格设计中,您无法执行此操作,因为deal_idupdate_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';