來自http://hi.baidu.com/7636553/blog/item/982beb17713bc004972b43ee.html
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:后面跟着數字的元素
(轉)http://blog.sina.com.cn/s/blog_6a67b5c50100zbrx.html