是否可以获取Cassandra组合键的所有值?

2024-03-28 15:01:33 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有:

cur.execute("CREATE TABLE data_by_year ( device_id int, \
        site_id text, year_id int, event_time timestamp, value float, \
        PRIMARY KEY ((device_id, site_id, year_id),event_time))")

我想查询2014年和2013年的所有设备。在

^{pr2}$

这句话显然有很多问题,但这是我能想出的最好的例子。我的牛肉是“where device_id IN(32453532453l)”的。实际上,我不知道所有的设备,所以我想抓住他们“所有”。我该怎么做?在

我处理的是时间序列分钟数据,所以我觉得一年是一个合理的划分。在


Tags: texteventidexecutedatabytimedevice
2条回答

knifeweine的回答是正确的,但是如果您要频繁地执行这个查询(并希望获得良好的性能),我建议使用第二个表:

CREATE TABLE all_device_data_by_year (
    site_id text,
    year_id int,
    device_id int,
    event_time timestamp,
    value float,
    PRIMARY KEY ((site_id, year_id), device_id, event_time)
)

您可能希望根据设备的数量按天/月而不是年进行分区。在

关于python驱动程序中的自动查询分页支持,它现在在2.0分支中可用。我很快就会有一个2.0测试版了。在

您可以使用ALLOW-FILTERING获取所有内容,但应注意,这在性能方面代价高昂,因为所有节点都需要回答:

select distinct device_id, site_id, year_id from data_by_year ALLOW FILTERING;

通过包含一个limit子句,性能问题可以稍微减轻一些,但这不允许您翻页浏览所有数据。如果您想要分页,您可能需要使用带有分页特性的datataxjava驱动程序(或者等待分页进入datataxpython驱动程序)。在

如果以上方法都不适用于您的用例,那么重新设计您的表可能是一个更好的选择(可能涉及一个二级索引,但这也会导致性能损失)。在

相关问题 更多 >