我想以编程方式检查大型cassandra表中的所有行,并希望使用CQL。我知道我可以用thrift做到这一点,用multiget一次获得10,000行(或者很多行)并将最后检索到的键交给下一个multiget调用。但我查看了有关CQL选择的所有文档,似乎没有办法做到这一点。我已经设置了更高和更高的选择限制,并设置更高和更高的超时以匹配它。
是否有一种未记录的方式将起点交给CQL选择,还是只需要使用thrift API分解和重写我的代码?
答案 0 :(得分:6)
结果大于和小于非直观但有用的行为(至少在CQL2中,我还没有检查过CQL3)。它实际上比较了令牌而不是关键值。这是一个例子:
> create table users (KEY varchar PRIMARY KEY, data varchar);
> insert into users (KEY, 'data') values ('1', 'one');
> insert into users (KEY, 'data') values ('2', 'two');
> insert into users (KEY, 'data') values ('3', 'three');
> insert into users (KEY, 'data') values ('4', 'four');
> select * from users;
3 | three
2 | two
1 | one
4 | four
> select * from users LIMIT 1;
3 | three
> select * from users WHERE KEY > '3' LIMIT 1;
2 | two
> select * from users WHERE KEY > '2' LIMIT 1;
1 | one
> select * from users WHERE KEY > '1' LIMIT 1;
4 | four
答案 1 :(得分:0)
选中此项:http://wiki.apache.org/cassandra/FAQ#iter_world
您需要手动编程,例如,以下每个查询都需要提供起点,这是上一次查询的最后结果。此起始端口将允许您创建切片查询,从而返回有限数量的结果。
例如,您的行包含以下列名称:
A1,A2,A3,B1,B2,B3,B4,B5,B6,C4,C5,D1,D2,D4,E2,E23,E4,E5,E6,E7
现在你想迭代它,每个响应都有3个结果
切片1)开始:“”,结束:“”,限制:3 - > A1,A2,A3
切片2)开始:“A3”,结束:“”,限制:3 - > B1,B2,B3
切片3)开始:“B3”,结束:“”,限制:3 - > B4,B5,B6
切片4)开始:“B6”,结束:“”,限制:3 - > C4,C5,D1