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:后面跟着数字的元素


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值