假设我有这张 table 。

CREATE TABLE keyspace.user_event ( 
   user_name varchar, 
   user_email varchar, 
   event_type int, 
   event_time timestamp, 
   a varchar, 
   b varchar, 
   c varchar 
   PRIMARY KEY ((user_name, user_email), event_type, event_time) 
) WITH CLUSTERING ORDER BY (event_type ASC, event_time DESC); 

我有兴趣找到最新的 user_event每一个独特的 event_type给定一个 user_name user_emailevent_type 的子集s。例如,组合查询看起来像这样。
SELECT user_name,  
       user_email,  
       event_type,  
       max(event_time) AS event_time,  
       a,  
       b,  
       c  
FROM   user_event  
WHERE  user_name = 'user_name3'  
       AND user_email = 'user_email3'  
       AND event_type IN ( 301, 219, 206, 226 )  
GROUP  BY event_type;  

这个 cassandra 查询会像我期望的那样表现吗?如果没有,我该如何重新制定查询?我想要专栏 a , b , 和 c与聚合返回的最大行匹配, max(event_time) .

现在,根据 https://docs.datastax.com/en/dse/5.1/cql/cql/cql_reference/cqlAggregates.html , cassandra 将默认为非聚合列的第一行。因为我完整地指定了分区键,所以我希望搜索单个分区,因此集群键的顺序在该分区内保持一致。

通过对几行进行本地测试,我还无法中断查询,但我想确保我没有遗漏任何意外行为。

举个例子,假设我们有以下数据。
|user_email |user_name  |event_type|a  |b  |c  |event_time               | 
|-----------|-----------|----------|---|---|---|-------------------------| 
|user_email2| user_name2|219       |a1 |b1 |c1 | 2019-10-01 18:50:25.653Z| 
|user_email3| user_name3|219       |a2 |b2 |c2 | 2019-10-01 18:50:25.665Z| 
|user_email3| user_name3|226       |a3 |b3 |c3 | 2019-10-01 21:37:05.663Z| 
|user_email3| user_name3|301       |a4 |b4 |c4 | 2019-10-01 18:50:35.658Z| 
|user_email3| user_name3|301       |a5 |b5 |c5 | 2019-10-01 18:50:25.660Z| 
|user_email3| user_name3|301       |a6 |b6 |c6 | 2019-10-01 18:50:25.656Z| 
|user_email1| user_name1|206       |a7 |b7 |c7 | 2019-10-01 18:50:25.604Z| 

上述查询的预期输出是。
event_type |    a,b,c   | 
-----------|------------| 
226        | a3, b3, c3 |   
219        | a2, b2, c2 | 
301        | a4, b4, c4 | 

请您参考如下方法:

将以下内容添加到上面的脚本中:

    SELECT DISTINCT(event_type) as event_type; 
 
    ORDER BY event_type, event_time DESC; 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!