在类型为timeuuid的主键上的Cassandra中排序

时间:2015-07-04 05:08:44

标签: sorting cassandra

我是cassandra的新手。我想在主键即timeuuid的基础上得到排序的结果集。我的桌子结构是。

CREATE TABLE user_session
(
  session_id timeuuid,
  ip inet,
  device_type int,
  is_active int,
  last_access_time timestamp,
  logout_reason text,
  logout_type int,
  start_time timestamp,  
  uid int,
  PRIMARY KEY(session_id)
);

任何人都可以帮助我。

2 个答案:

答案 0 :(得分:4)

您无法在主列的查询中使用order by。它仅在群集列上受支持。您必须更改此表才能执行此类查询。它可能看起来像这样:

CREATE TABLE user_session
(
user_id int,
session_id timeuuid,
ip inet,
device_type int,
is_active int,
last_access_time timestamp,
logout_reason text,
logout_type int,
start_time timestamp,  
uid int,
PRIMARY KEY(user_id, session_id)
);

然后,您的查询将如下所示:

select * from user_session where user_id=5 order by session_id ASC;

基本上,您需要一些主键,用于搜索仅允许EQIN关系的数据,因此您不能拥有user_id > 5或类似内容,以及然后,您可以通过您的案例session_id中的群集列来订购结果。

卓然

答案 1 :(得分:1)

您可以在表定义中使用ORDER BY,以便在插入过程中保持正确的顺序。 PRIMARY KEY定义具有分区键user_id和用于排序的群集列session_id。它可能看起来像这样:

CREATE TABLE user_session
(
user_id int,
session_id timeuuid,
ip inet,
device_type int,
is_active int,
last_access_time timestamp,
logout_reason text,
logout_type int,
start_time timestamp,  
uid int,
PRIMARY KEY(user_id, session_id)
) WITH CLUSTERING ORDER BY (session_id ASC);