SliceQuery<String, String, Long> query = HFactory.createSliceQuery(cassandraService.getKeyspace(), StringSerializer.get(), StringSerializer.get(), LongSerializer.get());
query.setColumnFamily("your_cf_name");
query.setKey("your_rowkey");
ColumnSliceIterator<String, String, Long> iterator = new ColumnSliceIterator<String, String, Long>(query, "", "", false);
while (iterator.hasNext()) {
HColumn<String, Long> element = iterator.next();
String cfName = element.getName();
String value = element.getValue();
System.out.println(cfName + " " + element.getValue());
}
ColumnSliceIterator的四个参数:
- SliceQuery对象,它cf和rowkey信息
- cf 查询的start位置
- cf 查询的end位置
- 反序查询设置。这个参数非常有用,如果你的数据是按照时间顺序存储,反序查找可以快速获取最新数据。
测试数据(cfname value)
001_I 36121866
001_O 1001601781
002_I 37068144
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466
008_I 29475122
008_O 677957355
009_I 29312435
009_O 641699077
010_I 27042011
010_O 599447449
001_O 1001601781
002_I 37068144
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466
008_I 29475122
008_O 677957355
009_I 29312435
009_O 641699077
010_I 27042011
010_O 599447449
测试一:正序查找模糊匹配
查询条件:
start = "002", end="008", reversed=false(正序查找)
则查询结果为:
002_I 37068144
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466
结论一:如果结束使用模糊匹配查找,则查询范围为 [ start, end ) ;start总是会找到第一个模糊(精确)匹配的
测试二:正序查找精确匹配
查询条件:start = "002", end="008_I", reversed=false(正序查找)
返回数据
002_I 37068144
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466
008_I 29475122
002_O 962978185
003_I 35767262
003_O 889229008
004_I 32442817
004_O 823356694
005_I 34822166
005_O 792243001
006_I 29860696
006_O 756651507
007_I 30314166
007_O 709360466
008_I 29475122
结论二:如果结束使用精确匹配,则查询范围为 [ start, end ]
测试三:反序查找模糊匹配
查询条件:start = "008", end="002", reversed=true(反序查找)
返回数据
007_O 709360466
007_I 30314166
006_O 756651507
006_I 29860696
005_O 792243001
005_I 34822166
004_O 823356694
004_I 32442817
003_O 889229008
003_I 35767262
002_O 962978185
002_I 37068144
007_I 30314166
006_O 756651507
006_I 29860696
005_O 792243001
005_I 34822166
004_O 823356694
004_I 32442817
003_O 889229008
003_I 35767262
002_O 962978185
002_I 37068144
结论三:反序查找模糊匹配边界为:( start, end ]
测试四:反序查找精确匹配
查询条件:start = "008_I", end="002", reversed=true
返回数据
008_I 29475122
007_O 709360466
007_I 30314166
006_O 756651507
006_I 29860696
005_O 792243001
005_I 34822166
004_O 823356694
004_I 32442817
003_O 889229008
003_I 35767262
002_O 962978185
002_I 37068144
007_O 709360466
007_I 30314166
006_O 756651507
006_I 29860696
005_O 792243001
005_I 34822166
004_O 823356694
004_I 32442817
003_O 889229008
003_I 35767262
002_O 962978185
002_I 37068144
结论四:反序查找精确匹配边界为:[ start, end ]
总结:
无论正向还是反向匹配,物理存储的end column匹配都是不能查询出模糊匹配的,只可以查询出精确匹配的内容。
正向:
end模糊匹配:[ start, end)
end精确匹配:[ start, end ]
反向
start模糊匹配:( start, end ]
start精确匹配:[ start, end ]
--end