获取Cassandra的日期范围 - 选择timeuuid,IN返回0行

时间:2015-02-19 20:48:43

标签: cassandra cql

我正试图从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查询中获取日期范围?

1 个答案:

答案 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。他有三个与你相似的例子。事实上,他的第一个非常类似于我在这里给你的建议。