从cassandra数据库检索数据

从cassandra数据库检索数据,cassandra,cql,cqlsh,Cassandra,Cql,Cqlsh,我正在处理存储在Cassandra数据库中的智能停车数据,并试图获取每个设备的最后状态。 我正在研究自制的数据集。 这是表格的说明。 需要帮助 正在尝试获取每个设备的最后状态 在Cassandra中,需要根据查询模式设计表。构建一个表,用数据填充它,然后尝试满足查询需求是一种非常向后的方法。关键是,如果您真的需要满足该查询,那么您的表应该从一开始就设计为服务于该查询 尽管如此,还是有办法让这项工作发挥作用的。您没有提到您正在使用哪个版本的Cassandra,但是如果您使用的是3.6+,您可以

我正在处理存储在Cassandra数据库中的智能停车数据,并试图获取每个设备的最后状态。 我正在研究自制的数据集。 这是表格的说明。

需要帮助

正在尝试获取每个设备的最后状态

在Cassandra中,需要根据查询模式设计表。构建一个表,用数据填充它,然后尝试满足查询需求是一种非常向后的方法。关键是,如果您真的需要满足该查询,那么您的表应该从一开始就设计为服务于该查询

尽管如此,还是有办法让这项工作发挥作用的。您没有提到您正在使用哪个版本的Cassandra,但是如果您使用的是3.6+,您可以在SELECT上使用PER PARTITION LIMIT子句

如果我构建您的表结构并插入一些行:

aploetz@cqlsh: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);
您至少是按日期(应该是实际的日期类型,而不是文本)进行聚类的,因此这将以一种有助于您的方式对行进行排序:

aploetz@cqlsh: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)

不清楚你在要求什么,不清楚什么不起作用…谢谢你的回答,我正在与cassandra 3.0.9合作。