如何使用Cassandra在分区中选择最大时间戳

时间:2018-11-09 13:04:32

标签: cassandra nosql

我在使用Cassandra建模数据时遇到问题。我想将其用作事件存储。我的活动有创建时间戳。这些事件属于一个由ID标识的分区。

现在,我想查看每个ID的最新事件,然后根据时间戳过滤该ID。

所以我有这样的东西:

ID | CREATION_TIMESTAMP              | CONTENT
---+---------------------------------+----------------
1  | 2018-11-09 12:15:45.841000+0000 | {SOME_CONTENT} 
1  | 2018-11-09 12:15:55.654656+0000 | {SOME_CONTENT}
2  | 2018-11-09 12:15:35.982354+0000 | {SOME_CONTENT}
2  | 2018-11-09 12:35:25.321655+0000 | {SOME_CONTENT}
2  | 2018-11-09 13:15:15.068498+0000 | {SOME_CONTENT}

我尝试按分区ID分组,并查询creation_timestamp的最大值,但这是不允许的,我应该使用EQ或IN指定分区ID。额外的阅读使我相信这是解决此问题的完全错误的方式,但是我不知道NoSQL是否不是适合该工作的工具,或者我只是从错误的角度解决此问题?

2 个答案:

答案 0 :(得分:5)

通过将CREATION_TIMESTAMP作为聚类列并订购DESC,可以轻松实现此目标。然后,您将使用自己的ID并使用限制1(由于该分区键中的数据按DESC顺序排序,这将返回最近的事件)进行查询。

答案 1 :(得分:0)

能否请您分享表定义。

通过查看数据,您可以将ID用作分区键,并将CREATION_TIMESTAMP用作聚簇列。

您可以在keyspace.table中使用select MAX(CREATION_TIMESTAMP),其中ID =“值”;