我想以编程方式检查大型 cassandra 表中的所有行,并希望使用 CQL。我知道我可以用 thrift 来做到这一点,使用 multiget 一次获取 10,000(左右)行,并将最后检索到的密钥交给下一个 multiget 调用。但是我查看了有关 CQL select 的所有文档,似乎没有办法做到这一点。我已经将选择限制设置得越来越高,并将超时设置得越来越高以匹配它。
是否有一种未记录的方式可以将起点交给 CQL 选择,还是我只需要使用 thrift API 分解和重写我的代码?
结果证明大于和小于具有非常不直观但有用的行为(至少在 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
检查这个: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