пытается получить последний статус каждого устройства
В Кассандре, вам нужно создавать свои таблицы в соответствии с вашими шаблонами запросов. Построение таблицы, заполнение ее данными, а затем попытка выполнить требование запроса - это очень назад. Дело в том, что если вам действительно нужно удовлетворить этот запрос, тогда ваша таблица должна была быть рассчитана на , подавая, что запрос с начала.
Это, как говорится, все еще может быть способ сделать эту работу. Вы не указали, какую версию Cassandra вы используете, но если вы на 3.6+, вы можете использовать предложение PER PARTITION LIMIT на вашем SELECT.
Если я построить структуру таблицы и вставить некоторые из ваших рядов:
[email protected]:stackoverflow> SELECT * FROM meters ;
parking_id | device_id | date | status
------------+-----------+----------------------+--------
1 | 20 | 2017-01-12T12:14:58Z | False
1 | 20 | 2017-01-10T09:11:51Z | True
1 | 20 | 2017-01-01T13:51:50Z | False
1 | 7 | 2017-01-13T01:20:02Z | False
1 | 7 | 2016-12-02T16:50:04Z | True
1 | 7 | 2016-11-24T23:38:31Z | False
1 | 19 | 2016-12-14T11:36:26Z | True
1 | 19 | 2016-11-22T15:15:23Z | False
(8 rows)
И я считаю ваш первичный ключ и порядкового группирования определения:
PRIMARY KEY ((parking_id, device_id), date, status)
) WITH CLUSTERING ORDER BY (date DESC, status ASC);
Вы по крайней мере, кластеризация по дате (который должен быть фактическим типом даты, а не текстом), чтобы упорядочить ваши ряды таким образом, чтобы вы здесь:
[email protected]:stackoverflow> SELECT * FROM meters PER PARTITION LIMIT 1;
parking_id | device_id | date | status
------------+-----------+----------------------+--------
1 | 20 | 2017-01-12T12:14:58Z | False
1 | 7 | 2017-01-13T01:20:02Z | False
1 | 19 | 2016-12-14T11:36:26Z | True
(3 rows)
Непонятно, что вы просите, непонятно, что не работает ... – Prokurors