我正试图从Cassandra的约会中获得一个范围,我创建了这样的表格:
CREATE TABLE teste6 (
time timeuuid,
id text,
checked boolean,
email text,
name text,
PRIMARY KEY ((time), id)
)
但是当我选择它时,它不会返回任何内容。
SELECT * FROM teste6 WHERE time IN ( minTimeuuid('2013-01-01 00:05+0000'), now() );
(0 rows)
如何从Cassandra查询中获取日期范围?
答案 0 :(得分:8)
IN
条件用于指定SELECT查询的多个键。要为您的表格运行日期范围查询,(您已关闭)但您希望使用大于和小于。
当然,您无法对分区键运行大于/小于查询,因此您需要翻转密钥才能使其正常工作。这也意味着您还需要在WHERE子句中指定id
:
CREATE TABLE teste6 (
time timeuuid,
id text,
checked boolean,
email text,
name text,
PRIMARY KEY ((id), time)
)
INSERT INTO teste6 (time,id,checked,email,name)
VALUES (now(),'B26354',true,'rdeckard@lapd.gov','Rick Deckard');
SELECT * FROM teste6
WHERE id='B26354'
AND time >= minTimeuuid('2013-01-01 00:05+0000')
AND time <= now();
id | time | checked | email | name
--------+--------------------------------------+---------+-------------------+--------------
B26354 | bf0711f0-b87a-11e4-9dbe-21b264d4c94d | True | rdeckard@lapd.gov | Rick Deckard
(1 rows)
虽然这在技术上有效,但按id
对数据进行分区可能不适合您的应用。因此,您可能需要在数据模型后面进行更多考虑,并提出更好的分区密钥。
修改强>
请记住,使用Cassandra,我们的想法是掌握您需要能够实现的查询类型。然后围绕它构建您的数据模型。您的原始表结构可能适用于关系数据库,但在Cassandra中,这种类型的模型实际上很难以您要求的方式查询数据。
看看我对你的表所做的修改(基本上,我只是颠倒你的分区和集群键)。如果你还需要帮助,Patrick McFadin(DataStax的首席布道师)写了一篇非常好的文章叫Getting Started with Time Series Data Modeling。他有三个与你相似的例子。事实上,他的第一个非常类似于我在这里给你的建议。