不幸的是,在Cassandra中確實沒有一種機制能夠以你所要求的方式工作。在分區鍵(rowkey)上運行範圍查詢的唯一方法是使用token
函數。這是因爲Cassandra通過分區鍵的散列標記值來排序集羣中的行。這個值對你來說沒有任何意義,但是它可以讓你在沒有遇到超時的情況下通過一個大表「頁面」。
SELECT * FROM <table-name>
WHERE token(rowkey) > -9223372036854775807
AND token(rowkey) < -5534023222112865485;
着手上有意義的值範圍查詢的方式,就是要找到一個數字或時間值的值通過分區你的行,然後集羣。例如,如果我按month
(PRIMARY KEY(month,eventdate)
)劃分我的數據,我可以按日期範圍查詢事件表:
[email protected]: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)