blu*_*man 7 java cassandra datastax
假设我有这张桌子。
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);
Run Code Online (Sandbox Code Playgroud)
我有兴趣寻找给定an 和s的user_event每个子集的最新值。例如,组合查询看起来像这样。event_typeuser_nameuser_emailevent_type
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;
Run Code Online (Sandbox Code Playgroud)
这个cassandra查询的行为是否会符合我的期望?如果没有,我应该如何重新构造查询?我想要列a,b并c与汇总返回的最大行匹配max(event_time)。
现在,按照https://docs.datastax.com/zh-CN/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|
Run Code Online (Sandbox Code Playgroud)
上面查询的预期输出将是。
event_type | a,b,c |
-----------|------------|
226 | a3, b3, c3 |
219 | a2, b2, c2 |
301 | a4, b4, c4 |
Run Code Online (Sandbox Code Playgroud)
小智 4
将以下内容添加到上面的脚本中:
SELECT DISTINCT(event_type) as event_type;
ORDER BY event_type, event_time DESC;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |