查询以获取cassandra中多个范围的记录

时间:2014-09-14 02:40:37

标签: cassandra cql cql3 cassandra-2.0

我有以下型号:

CREATE TABLE IF NOT EXISTS log (
  date varchar,
  timeid timeuuid,
  message varchar,
  ip varchar,
  time timestamp,
  user bigint,
  file varchar,
  line int,
  func varchar,
  level int,
  PRIMARY KEY (date, timeid, time)
) WITH CLUSTERING order by (timeid DESC);

如何获取某天的所有日志,其中记录在给定的时间和时间值之间?

目前的问题是因为如果我使用timeid>某些东西,我就不能使用时间>某些东西,因为cassandra不允许对群集密钥进行多次过滤(非EQ)。

我试过像

这样的东西
SELECT * FROM log 
    WHERE date='2014-09-14' 
    AND (timeid, time) <= (1245a230-3baa-11e4-8ca7-4bdg1fe06d46, '2014-09-14 03:57:16+0200') 
    AND (timeid, time) >= (cb66eef0-3ba9-11e4-8ca7-4bd6sfe06d46, '2015-09-14 02:57:14+0200');

但是在这种情况下cassandra并没有限制时间,所以我仍然会在2015-09-14 02:57:14 + 0200之前得到值,所以它只是在寻找timeid值。

有谁知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

TimeUUID的时间戳编码在其中,因此除非您在timeuuid中使用的时间戳与时间值不同,否则您应该可以根据timeid进行过滤。

不仅如此,cql还有一些内置函数可以使这更容易,例如

SELECT * FROM myTable
   WHERE t > maxTimeuuid('2013-01-01 00:05+0000')
   AND t < minTimeuuid('2013-02-02 10:00+0000')

参考Datastax Documentation on TimeUUID functions