Cassandra查询获取表的最后一行

时间:2014-11-10 06:21:02

标签: java cassandra-2.0

任何人都可以帮我拿到cassandra中最后一张桌子的记录。我想根据主键获取最后一行。我尝试使用order by for key仍然显示错误为使用order by所需的IN或EQ。当我添加一个IN子句时,它显示错误。请用一个例子解释我如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

你不能:)

数据仅通过群集键在分区内“排序”。您可以通过clusterin列上的查询进行排序,假设分区键和所有先前的群集键具有完全匹配。换句话说,如果您的PK为(a,b,c),则可以执行a ='asd'和b ='cds',然后对c进行范围查询。

您可以在分区上指定clusterin顺序,所以对于最新的,如果您将聚类作为时间戳desc,那么只需先选择将自动为您提供“最后”。例如:

create table timeseries (
  event_type text,
  insertion_time timestamp,
  event blob,
  PRIMARY KEY (event_type, insertion_time)
)
WITH CLUSTERING ORDER BY (insertion_time DESC);

注意,您需要指定分区键(event_type),并且检索到的行将是该分区中的“最新”。

但是,请考虑在分布式系统中“最新”是什么意思。根据您的使用情况,任何“最新”概念都可能过时。这可能是也可能是不可接受的。

如果你是通过一个不是desc聚类键的任意列来寻找“最新”,那么我建议使用Spark进行快速的“map reduce”,就像计算一样。