cassandra - 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_date
,order by
因此不需要。我需要扩展相同的查询以一次性检索所有应用程序的数据。
是否可以在 Cassandra 中执行此操作?如果没有,是否有一种数据建模技术可以让我这样做?
任何提示表示赞赏。
解决方案
推荐阅读
- angular - 为什么在 ngOnInit 中未定义 @Input 属性?
- api - 如何使用 DocuSign 正确地将包含两份文档副本的信封发送给两个收件人,每个收件人签名?
- postgresql - Google Cloud SQL[postgres] - db=postgres,user=postgres 致命:用户“postgres”的密码验证失败
- tfs - TFS 2017 链接父子查询 - 不同项目之间的过滤器
- javascript - RabbitMQ 语法中的哈希符号是什么意思?
- ruby-on-rails - Ruby 在单词之间添加了奇怪的间距
- javascript - 当localStorage中的值发生变化时如何使用效果?
- react-native - 如何使底部标签导航器的图标适合标签栏?
- python - Lambda过滤字典列表Python
- python - Python OpenCV 如何应用径向/桶形失真?