时间排序数据性质条件下的cassandra

4ioopgfo  于 2021-06-15  发布在  Cassandra
关注(0)|答案(1)|浏览(311)

假设我有以下数据结构

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”,它们Map到一个deal\u id=def的记录?
如果单靠一张table还不能做到这一点,那怎么用两张table呢?按更新日期排序和按日期限制的能力很重要。

vaqhlq81

vaqhlq811#

只能在查询的最后一个群集列上使用范围条件。在您的表设计中,您不能这样做,因为 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';

相关问题