hbase的scan查询功能注意项:
Scan scan = new Scan();
scan.setStartRow(“5193:”);
scan.setStopRow(“5194:”);
ResultScanner result = table.getScanner(scan);
for (Result r : result) {
get it......
}
查找
原本期望:
从下列中
5193:1
5193:2
5194:1
51939:1
51942:1
取出5193:---5194:中的元素(5193开头的元素),也就是(程序所使用的查询方式)
5193:1
5193:2
但是,其实很容易被误取了,实际查询得到的结果如下:
5193:1
5193:2
51942:1
原因是:与hbase内的scan的方式有关,hbase会将自己的元素按照key的ASCII码排序,
其实也就是说,我们会看见排列的方式如下:
51939:1
5193:1
5193:2
51942:1
5194:1
如果hbase使用这种查询方式,是实际工作中,因为id都比较长,其实发生的概率比较小,是一种偶现问题。
取出5193:开头的元素相对比较取巧的写法:
scan.setStartRow("5193:#");
scan.setStopRow("5193::");
ResultScanner result = table.getScanner(scan);
for (Result r : result) {
get it......
}
原因:ASCII排序中:"#" < "0-9" < ":"
取出来的将是5193:后面跟着数字的元素