首页 > 解决方案 > Cassandra 相当于 group by

问题描述

我正处于 Cassandra 应用程序数据建模的初始阶段。这个应用程序有现有的关系持久层,必须用 Cassandra 替换。

应用程序使用一个以login_log用户命名的表,它提供所有应用程序中任何用户的最后登录时间。

这是CQL我用来创建这个表的

create table login_log (
    user_id int,
    application_name text,
    login_date timestamp,
    primary key (user_id, application_name, login_date)
) with clustering order by (application_name asc, login_date desc)

user_id是分区键。application_name并且login_date是聚类键。此表维护登录历史记录,其中的数据永远不会被删除。

我正在尝试user_id在一个查询中检索给定所有应用程序的最后登录日期。

如果我正在编写一个SQL查询来做同样的事情,它看起来像下面

select user_id, application_name, max(login_date) from login_log group by user_id, application_name

然而它不能在 Cassandra 中完成,因为没有 group by 子句或聚合函数。可以说,集群列已经分组,但我无法创建一个查询来检索一个查询login_date中所有应用程序的最新信息。

如果为一个应用程序执行此操作,CQL如下所示

select * from login_log where user_id = ? and application_name = ? limit 1

由于集群已经按 , 排序login_dateorder by因此不需要。我需要扩展相同的查询以一次性检索所有应用程序的数据。

是否可以在 Cassandra 中执行此操作?如果没有,是否有一种数据建模技术可以让我这样做?

任何提示表示赞赏。

标签: cassandracql

解决方案


GROUP BY 受版本 3.10 检查改进票和 Cassandra官方文档支持


推荐阅读