我有以下型号:
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 回答
TimeUUID的时间戳编码在其中,因此除非您在timeuuid中使用的时间戳与时间值不同,否则您应该只根据timeid进行过滤 .
不仅如此,cql还有一些内置函数可以让它更容易实现
参考Datastax Documentation on TimeUUID functions