1
我在卡桑德拉一個以下數據集:InvalidRequest:代碼= 2200 [查詢無效]消息= 「運算符無效> =用於PRIMARY KEY部分」
表結構
CREATE TABLE userlog (
term text,
ts timestamp,
year int,
month int,
day int,
hour int,
weekofyear int,
dayofyear int,
count counter,
PRIMARY KEY (term, ts, year,month,day,hour,weekofyear,dayofyear)
);
。
term | ts | year | month | day | hour | weekofyear | dayofyear | count
------------------+--------------------------+------+-------+-----+------+------------+-----------+-------
www.datastax.com | 2028-07-13 17:06:28+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www.datastax.com | 2015-07-28 16:17:36+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 6
www.datastax.com | 2015-07-28 16:17:36+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www.datastax.com | 2015-07-28 16:17:36+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www.datastax.com | 2015-07-28 16:21:15+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www.datastax.com | 2015-07-28 16:21:33+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www.datastax.com | 2015-07-28 16:21:50+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www.datastax.com | 2015-07-28 16:21:52+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www.datastax.com | 2015-07-28 16:21:53+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www | 2015-07-28 16:46:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www. | 2015-07-28 16:47:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www. | 2015-07-28 16:48:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www. | 2015-07-28 16:50:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www. | 2015-07-28 16:55:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
當我運行此查詢:
SELECT * FROM userlog WHERE ts >= '2015-07-28 16:46' AND ts <= '2015-07-28 16:55' ALLOW FILTERING;
我得到正確的結果:
term | ts | year | month | day | hour | weekofyear | dayofyear | count
------+--------------------------+------+-------+-----+------+------------+-----------+-------
www | 2015-07-28 16:46:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www. | 2015-07-28 16:47:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www. | 2015-07-28 16:48:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www. | 2015-07-28 16:50:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
www. | 2015-07-28 16:55:00+0530 | 2015 | 7 | 28 | 16 | 31 | 209 | 2
但是當我嘗試用相同的條件刪除行
DELETE FROM userlog WHERE ts >= '2015-07-28 16:46' AND ts <= '2015-07-28 16:55';
它拋出以下錯誤:
InvalidRequest: code=2200 [Invalid query] message="Invalid operator >= for PRIMARY KEY part ts"
我錯過了什麼嗎?如何刪除指定時間範圍內的數據?另外,有沒有什麼辦法在指定的時間範圍內獲取數據(除了我正在做的事情?)
'如果要選擇性刪除分區內的行,可以先使用SELECT查詢它們,然後在應用程序中發出從SELECT返回的每一行的刪除操作。' 如何做到這一點?通過選擇結果刪除語句? –
我能夠迭代並獲得結果 'ResultSet result = session.execute(insertUpdateTable); (result.iterator()。hasNext()) while(result.iterator()。hasNext()) { \t System.out.println(result.one()); }' 如何將它傳遞給刪除語句? –
吉姆,很好的回答!圍繞CQL DELETE有很多困惑,所以很高興看到它像這樣拼寫出來。 – Aaron