我是cassandra和hector的新手。现在我正在尝试检索我存储在cassandra中的一些数据。有很多列,其中一些有前缀。
column1 column2 column3 prefix1_prefix2_column3 prefix1_prefix2_column4 ....等等。
现在我想获取带有prefix1_prefix2 _
的所有列 然而,我得到的比我想要的更多,其他一些专栏也是回归。CF比较器是bytestype,我也试过utf8类型,它不起作用。
以下是我的代码,
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());
}
所以,这一切,我的专栏数量超出了我的预期......任何人都可以帮助我吗? 非常感谢你
答案 0 :(得分:0)
生成密钥时不要连接字符串,尝试将列名拆分为复合键,如“prefix1_prefix2_”和“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);