我試圖顯示傳感器列表中的最新值。該列表還應該可以通過時間戳進行排序。通過Cassandra中的時間戳訂購最新記錄
我嘗試了兩種不同的方法。我包括傳感器的在主鍵的更新時間:
CREATE TABLE sensors (
customerid int,
sensorid int,
changedate timestamp,
value text,
PRIMARY KEY (customerid, changedate)
) WITH CLUSTERING ORDER BY (changedate DESC);
然後我可以選擇列表是這樣的:
select * from sensors where customerid=0 order by changedate desc;
這導致這樣的:
customerid | changedate | sensorid | value
------------+--------------------------+----------+-------
0 | 2015-07-10 12:46:53+0000 | 1 | 2
0 | 2015-07-10 12:46:52+0000 | 1 | 1
0 | 2015-07-10 12:46:52+0000 | 0 | 2
0 | 2015-07-10 12:46:26+0000 | 0 | 1
問題是,我沒有得到最新的結果,但也得到了所有的舊值。
如果我從主鍵中刪除更改,則select一起失敗。
InvalidRequest: code=2200 [Invalid query] message="Order by is currently only supported on the clustered columns of the PRIMARY KEY, got changedate"
更新的傳感器值也沒有選項:
update overview set changedate=unixTimestampOf(now()), value = '5' where customerid=0 and sensorid=0;
InvalidRequest: code=2200 [Invalid query] message="PRIMARY KEY part changedate found in SET part"
失敗的原因CHANGEDATE是主鍵的一部分。
是否有任何可能的方法來存儲每個傳感器的最新值,並且還通過時間戳記來保存表格?
編輯: 在此期間,我嘗試了另一種方法,只存儲最新值。
我用這個模式:
CREATE TABLE sensors (
customerid int,
sensorid int,
changedate timestamp,
value text,
PRIMARY KEY (customerid, sensorid, changedate)
) WITH CLUSTERING ORDER BY (changedate DESC);
將最新的值之前,我會刪除所有舊值
DELETE FROM sensors WHERE customerid=? and sensorid=?;
但這種失敗,因爲changedate
沒有WHERE子句的一部分。
這似乎是經典檢索每組問題中的最後一條記錄。即獲取每個sensorID的最新讀數。 – malhal