2017-09-01 57 views
1

我是CASSANDRA的新手,因此问题可能太简单。如何在CASSANDRA中搜索某个范围内的参数

我正试图执行具有由两个组件组成的分区键的表上的查询:refid和partid。我遇到的问题是,partid的数量可能很大(并且对于不同的refid会有所不同)。我现在使用的查询是这样的:

SELECT * FROM contigs WHERE refid=29179863 AND partid IN (0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21); 

我想什么做的是有一个查询看起来像这样:

SELECT * FROM contigs WHERE refid=29179863 AND partid IN range(0,21); 

有没有办法做到这一点?我想避免在python中首先创建查询字符串,然后在Cassandra中执行它...

回答

1

使用IN作为分区键select查询可能导致性能问题。 指定refid作为分区键,但partid聚集键,你将能够partid

CREATE TABLE contigs ( 
    refid int, 
    partid int, 
     ... other fields... 
    PRIMARY KEY ((refid), partid) 
); 

查询做范围查询partid范围:

SELECT * FROM contigs WHERE refid=29179863 AND partid >= 0 AND partid < 21; 

但注意,卡桑德拉有2限制在这种情况下,在一个分区键里面有数十亿行,所以你不能有超过20亿的partid用于refid。