按日期检索行:cassandra

retrieve rows by date: cassandra

数据中有一列 timestamp,模式为:

YEAR-MM-DD hour:minute:second

我想检索此时间戳列日期所在的行,例如是 > 2015-07-01

我不想比较时间,只是日期。 我试过了:

SELECT * FROM table_name where timestamp >= '2015-10-01' limit 10;

但没有给出所需的输出。

问题是如果列不是分区键或未编入索引的列,则无法使用该列过滤数据。

它们是使用关键字 allow filtering.

对列进行聚类的例外

有关详细信息,请参阅 Datastax documentation

这里的一个问题是,Cassandra 在允许任何其他类型的条件(<、>、 ETC)。其他解决方案,如使用 ALLOW FILTERING 或索引,可能 "work," 但它们不会大规模执行,也不会 return 以任何顺序排列行。

Cassandra 只能在 分区键内强制执行排序顺序。例如,这意味着您可以 select 其中第一个 clustering column, given a certain, specific value for the partition key.

中具有特定 date/times 值的行

示例:

CREATE TABLE Whosebug.timestamptest (
    userid text,
    activetime timestamp,
    value text,
    PRIMARY KEY (userid, activetime)
) WITH CLUSTERING ORDER BY (activetime ASC)

aploetz@cqlsh:Whosebug> SELECT * FROm timestamptest 
                             WHERE userid='a' AND activetime > '2015-09-25';                
 userid | activetime               | value
--------+--------------------------+---------
      a | 2015-09-25 06:33:33-0500 |  value1
      a | 2015-09-25 06:34:33-0500 |  value2
      a | 2015-10-22 09:26:00-0500 |  value3

(3 rows)

基本上,您需要以对您的应用程序和查询要求有意义的方式进一步划分 table。

对于许多 Cassandra 开发人员来说,这往往是一个令人困惑的问题,因此我在今年早些时候为 DataStax 撰写的一篇文章中包含了一个 link:We Shall Have Order!