`
kabike
  • 浏览: 599169 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

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来全表扫描.



但是假设这个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,就可以完成文件遍历.



该方法可用于rowkey的非前缀搜索,以及在wide row中进行inter row scan
  • 大小: 4.6 KB
  • 大小: 8.1 KB
0
4
分享到:
评论
1 楼 zhao_rock 2015-01-15  
写的不错,继续努力

相关推荐

Global site tag (gtag.js) - Google Analytics