Cassandra 与Queryslice.setrange混淆
我是卡桑德拉和赫克托的新手。现在我正试图检索一些存储在cassandra中的数据。有很多列,其中一些列有前缀 第1列第2列第3列前缀x1_前缀x2_列第3列前缀x1_前缀x2_列4…依此类推 现在我想得到所有带有前缀x1_prefix2的列_ 然而,我得到了比我想要的更多的东西,其他一些专栏也被重新引用 CF比较器是ByTestType,我也尝试了utf8类型,它不工作 下面是我的代码Cassandra 与Queryslice.setrange混淆,cassandra,hector,Cassandra,Hector,我是卡桑德拉和赫克托的新手。现在我正试图检索一些存储在cassandra中的数据。有很多列,其中一些列有前缀 第1列第2列第3列前缀x1_前缀x2_列第3列前缀x1_前缀x2_列4…依此类推 现在我想得到所有带有前缀x1_prefix2的列_ 然而,我得到了比我想要的更多的东西,其他一些专栏也被重新引用 CF比较器是ByTestType,我也尝试了utf8类型,它不工作 下面是我的代码 SliceQuery<UUID, String, ByteBuffer> query = HFac
SliceQuery<UUID, String, ByteBuffer> query = HFactory.createSliceQuery(
keyspace, UUIDSerializer.get(), stringSerializer,
ByteBufferSerializer.get());
String columnPrifx = "prefix1_prefix2";
query.setKey(keyuuid).setColumnFamily("UserLogin");
query.setRange(columnPrifx, columnPrifx, false, Integer.MAX_VALUE);
//query.setRange(columnPrifx, null, false, Integer.MAX_VALUE);
//i also tried null above
ColumnSliceIterator<UUID, String, ByteBuffer> iterator = new ColumnSliceIterator<UUID, String, ByteBuffer>(
query, null, "\uFFFF", false);
while (iterator.hasNext()) {
HColumn<String, ByteBuffer> c = iterator.next();
System.out.println(c.getName());
}
SliceQuery query=HFactory.createSliceQuery(
键空间、UUIDSerializer.get()、stringSerializer、,
ByteBufferSerializer.get());
字符串columnPrifx=“prefix1\u prefix2”;
setKey(keyuuid).setColumnFamily(“用户登录”);
setRange(columnPrifx、columnPrifx、false、Integer.MAX_值);
//setRange(columnPrifx,null,false,Integer.MAX_值);
//我也尝试了上面的null
ColumnSiceIterator迭代器=新ColumnSiceIterator(
查询,null,“\uFFFF”,false);
while(iterator.hasNext()){
HColumn c=迭代器.next();
System.out.println(c.getName());
}
所以,所有这些,我得到了比我预期的更多的专栏。。。有人能帮我吗
非常感谢在生成键时不要压缩字符串,请尝试将列名拆分为复合键,如“prefix1\u prefix2\u”和“column3”。现在,如果您获取如下所示的数据,您将得到结果
Composite startRange = new Composite();
startRange.addComponent(0, "prefix1_prefix2_",Composite.ComponentEquality.EQUAL);
Composite endRange = new Composite();
endRange.addComponent(0, "prefix1_prefix2_",Composite.ComponentEquality.GREATER_THAN_EQUAL);
query.setRange(startRange, endRange, false, Integer.MAX_VALUE);