hbase利用hint来实现filter快速扫描

hbase只有rowkey上有索引,在rowkey上可以实现快速扫描,想在column上进行条件筛选或者是在rowkey的非前缀部分进行筛选只能通过filter,而一直以为filter只能顺序的遍历所有KeyValue.
但实际上filter可以提供hint来使scanner reseek重新定位,提高查询效率.

比如假设rowkey设计形式为barfoo,前三位是定长的bar属性,后三位是定长的foo属性,在bar属性上查询很容易,因为它是rowkey的前缀,使用startrow和endrow可以快速查询,对于非前缀属性foo来说,指定startrow是没有用的,必须要full scan才行.比如想查询***fo3的行,可以想象使用RegexStringComparator和RowFilter来全表扫描.

[img]http://dl2.iteye.com/upload/attachment/0105/3133/dfb590bf-d799-3946-bf6e-8255ea571d0d.png[/img]

但是假设这个table中,bar的基数比较小,foo的基数比较大(即bar的不同值的个数很少,而foo的不同值的个数很多).那么这时候可以通过在Filter的filterKeyValue方法中返回SEEK_NEXT_USING_HINT,告诉scanner进行reseek重定位,比如上述问题中,在检查过ba1fo3后,下一个rowkey是ba1fo4,可以通过hint告知scanner,reseek到ba2fo3的位置,即使hfile中没有ba2fo3这个key,也能定位到附近位置.假设bar的取值有十个,那么经过十次左右reseek,就可以完成文件遍历.

[img]http://dl2.iteye.com/upload/attachment/0105/3135/cfb4af30-efc1-3137-ab11-2da98dbe6136.png[/img]

该方法可用于rowkey的非前缀搜索,以及在wide row中进行inter row scan
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值