Cassandra 相当于 group by
Cassandra equivalent of group by
我正处于 Cassandra 应用程序数据建模的初始阶段。此应用程序具有现有的关系持久层,必须用 Cassandra 替换它。
应用程序为用户使用名为 login_log
的 table,它为所有应用程序中的任何用户提供上次登录时间。
这是我用来创建这个 table
的 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
是聚类键。此 table 维护登录历史记录,其中的数据永远不会被删除。
我正在尝试在一个查询中为所有应用程序检索给定 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_date
已经订购了集群,因此不需要 order by
。我需要扩展相同的查询以一次性检索所有应用程序的数据。
在 Cassandra 中可以做到这一点吗?如果没有,是否有允许我执行此操作的数据建模技术?
如有任何提示,我们将不胜感激。
从版本 3.10 开始支持 GROUP BY 检查改进票证 here and Cassandra official documentation。
我正处于 Cassandra 应用程序数据建模的初始阶段。此应用程序具有现有的关系持久层,必须用 Cassandra 替换它。
应用程序为用户使用名为 login_log
的 table,它为所有应用程序中的任何用户提供上次登录时间。
这是我用来创建这个 table
的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
是聚类键。此 table 维护登录历史记录,其中的数据永远不会被删除。
我正在尝试在一个查询中为所有应用程序检索给定 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_date
已经订购了集群,因此不需要 order by
。我需要扩展相同的查询以一次性检索所有应用程序的数据。
在 Cassandra 中可以做到这一点吗?如果没有,是否有允许我执行此操作的数据建模技术?
如有任何提示,我们将不胜感激。
从版本 3.10 开始支持 GROUP BY 检查改进票证 here and Cassandra official documentation。