2017-01-06 12 views
-1

Я работаю над данными об интеллектуальной парковке, хранящимися в базе данных Cassandra, и я пытаюсь получить последний статус каждого устройства. Я работаю над самодельным набором данных. вот описание таблицы. table descriptionПолучение данных из базы данных cassandra

select * from parking.meters

нужна помощь, пожалуйста!

+0

Непонятно, что вы просите, непонятно, что не работает ... – Prokurors

ответ

1

пытается получить последний статус каждого устройства

В Кассандре, вам нужно создавать свои таблицы в соответствии с вашими шаблонами запросов. Построение таблицы, заполнение ее данными, а затем попытка выполнить требование запроса - это очень назад. Дело в том, что если вам действительно нужно удовлетворить этот запрос, тогда ваша таблица должна была быть рассчитана на , подавая, что запрос с начала.

Это, как говорится, все еще может быть способ сделать эту работу. Вы не указали, какую версию 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) 
+0

спасибо за ваш ответ, я работаю с cassandra 3.0.9. –

 Смежные вопросы

  • Нет связанных вопросов^_^