我是cassandra的新手。我正在使用cassandra-3.0和datastax java驱动程序进行开发。我想知道cassandra是否提供了基于rowkey范围来计算数据的任何选项?
类似
select * from <table-name> where rowkey > ? and rowkey < ?;
如果没有,cassandra(java / cql)中是否有基于行范围的fetchdata的其他选项?
答案 0 :(得分:0)
不幸的是,Cassandra中没有一种机制可以按照你要求的方式运作。在分区键(rowkey)上运行范围查询的唯一方法是使用token
函数。这是因为Cassandra通过分区键的哈希标记值在集群中对其行进行排序。这个价值对你来说没有任何意义,但是它可以让你进入&#34; page&#34;通过一张大桌子而不会遇到超时。
SELECT * FROM <table-name>
WHERE token(rowkey) > -9223372036854775807
AND token(rowkey) < -5534023222112865485;
对有意义的值进行范围查询的方法是找到一个值来对行进行分区,然后按数字或时间值进行聚类。例如,如果我按month
(PRIMARY KEY(month,eventdate)
)对数据进行分区,我可以按日期范围查询事件表:
aploetz@cqlsh:stackoverflow> SELECT * FROM events
WHERE monthbucket='201509'
AND eventdate > '2015-09-19' AND eventdate < '2015-09-26';
monthbucket | eventdate | beginend | eventid | eventname
-------------+--------------------------+----------+--------------------------------------+------------------------
201509 | 2015-09-25 06:00:00+0000 | B | a223ad16-2afd-4213-bee3-08a2c4dd63e6 | Hobbit Day
201509 | 2015-09-25 05:59:59+0000 | E | 9cd6a265-6c60-4537-9ea9-b57e7c152db9 | Cassandra Summit
201509 | 2015-09-22 06:00:00+0000 | B | 9cd6a265-6c60-4537-9ea9-b57e7c152db9 | Cassandra Summit
201509 | 2015-09-20 05:59:59+0000 | E | b9fe9668-cef2-464e-beb4-d4f985ef9c47 | Talk Like a Pirate Day
201509 | 2015-09-19 06:00:00+0000 | B | b9fe9668-cef2-464e-beb4-d4f985ef9c47 | Talk Like a Pirate Day
(5 rows)