获取 Cassandra 的日期范围 - Select timeuuid IN 返回 0 行

Get Date Range for Cassandra - Select timeuuid with IN returning 0 rows

我正在尝试从 Cassandra 上的日期范围获取数据,table 是这样的:

CREATE TABLE test6 (
  time timeuuid,
  id text,
  checked boolean,
  email text,
  name text,
  PRIMARY KEY ((time), id)
)

但是当我 select 一个数据范围时,我什么也得不到:

SELECT * FROM teste WHERE time IN ( minTimeuuid('2013-01-01 00:05+0000'), now() );

(0 rows)

如何从 Cassandra 查询中获取日期范围?

IN 条件用于为 SELECT 查询指定多个键。 运行 table 的日期范围查询,(你很接近)但是你会想要使用大于和小于。

当然,您不能 运行 对分区键进行 greater-than/less-than 查询,因此您需要翻转键才能正常工作。这也意味着您还需要在 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,其想法是处理您需要能够满足的查询类型。然后围绕它构建您的数据模型。您原来的 table 结构可能适用于关系数据库,但在 Cassandra 中,这种类型的模型实际上很难按照您要求的方式查询数据。

看看我对你的 table 所做的修改(基本上,我只是颠倒了你的分区和集群键)。如果您仍然需要帮助,Patrick McFadin(DataStax 的首席传播者)写了一篇非常好的文章,名为 Getting Started with Time Series Data Modeling。他举了三个与你相似的例子。事实上,他的第一个与我在这里为您建议的非常相似。