2016-03-03 116 views
1

我是cassandra的新手。我正在使用cassandra-3.0和datastax java驅動程序進行開發。我想知道cassandra是否提供了基於rowkey範圍的數據選擇?基於行範圍的Cassandra查詢表

select * from <table-name> where rowkey > ? and rowkey < ?; 

如果沒有,有沒有在卡桑德拉(Java/CQL)任何其他選項fetchdata基於行的範圍?

回答

0

不幸的是,在Cassandra中確實沒有一種機制能夠以你所要求的方式工作。在分區鍵(rowkey)上運行範圍查詢的唯一方法是使用token函數。這是因爲Cassandra通過分區鍵的散列標記值來排序集羣中的行。這個值對你來說沒有任何意義,但是它可以讓你在沒有遇到超時的情況下通過一個大表「頁面」。

SELECT * FROM <table-name> 
WHERE token(rowkey) > -9223372036854775807 
AND token(rowkey) < -5534023222112865485; 

着手上有意義的值範圍查詢的方式,就是要找到一個數字或時間值的值通過分區你的行,然後集羣。例如,如果我按monthPRIMARY 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)