1. 程式人生 > >hbase的查詢Scan功能(setStartRow, setStopRow)

hbase的查詢Scan功能(setStartRow, setStopRow)

http://f.dataguru.cn/thread-243074-1-1.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" < ":"其中,在上述演算法中 “/” 也可以用 “#” 代替,因為: "#" < "0-9" < ":"
取出來的將是5193:後面跟著數字的元素