Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
群by的Cassandra等价_Cassandra_Cql - Fatal编程技术网

群by的Cassandra等价

群by的Cassandra等价,cassandra,cql,Cassandra,Cql,我正处于Cassandra应用程序数据建模的初始阶段。此应用程序具有现有的关系持久层,必须用Cassandra替换该层 应用程序为用户使用名为login\u log的表,该表为所有应用程序中的任何用户提供上次登录时间 这是我用来创建这个表的CQL 创建表登录\u日志( 用户id int, 应用程序名称文本, 登录日期时间戳, 主键(用户id、应用程序名称、登录日期) )使用群集顺序(应用程序名称asc、登录日期desc) user\u id是分区键应用程序名称和登录日期是群集键。此表维护登录的

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

应用程序为用户使用名为
login\u log
的表,该表为所有应用程序中的任何用户提供上次登录时间

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

创建表登录\u日志(
用户id int,
应用程序名称文本,
登录日期时间戳,
主键(用户id、应用程序名称、登录日期)
)使用群集顺序(应用程序名称asc、登录日期desc)
user\u id
是分区键<代码>应用程序名称和登录日期是群集键。此表维护登录的历史记录,其中的数据永远不会被删除

我试图在一个查询中检索所有应用程序的给定
用户id
的最后登录日期

如果我正在编写一个
SQL
查询来执行相同的操作,它将如下所示


按用户标识、应用程序名称从登录日志组中选择用户标识、应用程序名称、最大(登录日期)
但是,这不能在Cassandra中完成,因为没有GROUPBY子句或聚合函数。可以说,集群列已经分组,但我无法创建一个查询,在一个查询中检索所有应用程序的最新登录日期

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

从登录日志中选择*其中用户id=?应用程序名称=?限制1
由于集群已按登录日期排序,因此不需要按排序。我需要扩展相同的查询,以便一次性检索所有应用程序的数据

在卡桑德拉有可能做到这一点吗?如果没有,是否有一种数据建模技术允许我这样做


感谢您的任何提示。

版本3.10支持GROUP BY check improvement ticket和Cassandra。

根据用户id从登录日志组中选择用户id、应用程序名称、最大登录日期,应用程序名称将与适当的
max
函数配合使用。使用UDA或UDF时,请确保位于分区内。跨部门UDA/UDF将不会按比例执行。