group by功能有點受限,使用於group by的條件只能是primary key。
當然,aggregation function也有,搭配GROUP BY一起使用。
SELECT weatherstation_id, date, MAX(temperature) FROM temperature_by_day
GROUP BY weatherstation_id, date, event_time;
limit 可以與ALLOW FILTERING
一起使用,ALLOW FILTERING可以透過limit的限制,改善查詢時間。
limit的查詢條件,除了在cqlsh裡面有預設限制撈出10,000筆資料,在CASSANDRA/SCYLLA並沒有預設撈出筆數的限制。
有趣的一點,雖然沒有預設撈出的最大筆數,但也不是無限制的撈取資料,會有一個撈取資料timeout的設定值,避免是因為下錯語法,導致系統不穩定。
撈取順序與RDBMS的limit一樣,假設指定limit 200,意即撈出前200筆資料返回。
在CASSANDRA/SCYLLA,如果單單指下limit
,那麼搜尋的範圍是全部的資料(all partition),從中挑選出指定的筆數。
除此之外,還有另一種PER PARTITION LIMIT
,亦即從每個partition撈出指定的筆數,這點是RDBMS所沒有的。
如以下引用官方的範例:
cqlsh:ks1> SELECT client_id, when FROM ks1.test LIMIT 3;
client_id | when
-----------+---------------------------------
1 | 2019-12-31 22:00:00.000000+0000
1 | 2020-01-01 22:00:00.000000+0000
2 | 2020-02-10 22:00:00.000000+0000
(3 rows)
cqlsh:ks1> SELECT client_id, when FROM ks1.test PER PARTITION LIMIT 1;
client_id | when
-----------+---------------------------------
1 | 2019-12-31 22:00:00.000000+0000
2 | 2020-02-10 22:00:00.000000+0000
4 | 2020-02-10 22:00:00.000000+0000
3 | 2020-02-10 22:00:00.000000+0000
(4 rows)
甚至,兩種limit可以結合一起使用
cqlsh> SELECT client_id, when FROM ks1.test PER PARTITION LIMIT 1 LIMIT 3;
client_id | when
-----------+---------------------------------
1 | 2019-12-31 22:00:00.000000+0000
2 | 2020-02-10 22:00:00.000000+0000
4 | 2020-02-10 22:00:00.000000+0000
(3 rows)
以上是關於limit的介紹,不過新手如筆者,暫且不太能想像PER PARTITION LIMIT的使用情境。
若有什麼好想法也可以留言給筆者喔。