我有以下型号:
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值。
有谁知道如何解决这个问题?
答案 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')