在Cassandra中查询时我不知道主键 我所知道的是我想要获取数据的时间范围 所以我把表格的分区键保存为纪元。
CREATE TABLE tmp2 (
epoch bigint,
primary key (epoch)
);
INSERT INTO tmp2 (epoch) values (unixTimestampOf(now()));
INSERT INTO tmp2 (epoch) values (unixTimestampOf(now()));
INSERT INTO tmp2 (epoch) values (unixTimestampOf(now()));
INSERT INTO tmp2 (epoch) values (unixTimestampOf(now()));
INSERT INTO tmp2 (epoch) values (unixTimestampOf(now()));
select * from tmp2;
epoch
---------------
9410
8171
7595
8746
6009
注意:我已经通过删除公共前缀148826477将时期减少到更可读的数字
我尝试根据纪元范围查询此表:
Select * from tmp2 where epoch >= 6009 and epoch <= 7595;
InvalidRequest: Only EQ and IN relation are supported on the partition key (unless you use the token() function)
所以我使用了token()函数,一切都很好:
Select * from tmp2 where token(epoch) <= token(6009) and token(epoch) >= token(7595);
epoch
---------------
7595
8746
6009
但是,我怀疑使用令牌实际上并不是基于时间给我查询,因为令牌(纪元)和令牌(纪元+100)可能与纪元和纪元+ 100没有相同的线性关系。
例如:
Select * from tmp2 where token(epoch) <= token(7009) and token(epoch) >= token(7595);
epoch
-------
(0 rows)
答案 0 :(得分:0)
但是,我怀疑使用令牌实际上并没有给我 基于时间查询,因为令牌(纪元)和令牌(纪元+ 100)可能 没有与纪元和纪元相同的线性关系+ 100有。
你的可疑是正确的。它们确实是两个非常不同的东西。我recently posted explanation关于数据查询和令牌功能查询之间的区别。
回到你的问题:
如果您只是按my advice上的your previous question,就可以在眨眼间解决问题。
我想补充说cassandra中的一个基本内容是在查询数据时确实需要知道分区键,这就是错误所说的。