首页 文章

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

提问于
浏览
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和time值之间?

目前的问题是因为如果我使用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之前获得 Value ,所以它只是在寻找timeid值 .

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

1 回答

  • 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

相关问题