hbase的查詢scan功能注意點(setStartRow, setStopRow)


來自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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM