前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HBase常用的Filter总结

HBase常用的Filter总结

作者头像
用户1217611
发布2022-07-29 14:14:57
1.1K0
发布2022-07-29 14:14:57
举报
文章被收录于专栏:文渊之博文渊之博

简介:         根据技术调研的过程可以明显的体会到hbase的存储方式和数据库的存储有着明显的区别,查询的方式也有着很大不同,HBase主要是通过这种filter来对数据进行筛选。同时对于数据的体量较大(10亿级别以上的数据数据量),检索和修改的场景较多时是比较适合使用hbase。      HBase过滤器可以根据分为:列簇与列类型过滤器,行键过滤器,其他过滤器 HBase Filter 概览 查询hbase支持的filter 列表

代码语言:javascript
复制
base(main):001:0> show_filters
DependentColumnFilter                                                                                                                                                  
KeyOnlyFilter                                                                                                                                                          
ColumnCountGetFilter                                                                                                                                                   
SingleColumnValueFilter                                                                                                                                                
PrefixFilter                                                                                                                                                           
SingleColumnValueExcludeFilter                                                                                                                                         
FirstKeyOnlyFilter                                                                                                                                                     
ColumnRangeFilter                                                                                                                                                      
ColumnValueFilter                                                                                                                                                      
TimestampsFilter                                                                                                                                                       
FamilyFilter                                                                                                                                                           
QualifierFilter                                                                                                                                                        
ColumnPrefixFilter                                                                                                                                                     
RowFilter                                                                                                                                                              
MultipleColumnPrefixFilter                                                                                                                                             
InclusiveStopFilter                                                                                                                                                    
PageFilter                                                                                                                                                             
ValueFilter                                                                                                                                                            
ColumnPaginationFilter                                                                                                                                                 
Took 0.0033 seconds 

HBase Filter 使用简单例子 行键过滤器 RowFilter:针对行键进行过滤 

代码语言:javascript
复制
  scan 'test',FILTER=>"RowFilter(=,'binaryprefix:row')"

    说明:把test表中rowkey 以row开头的数据查出来     支持的比较运算符:= != > >= < <= 。 PrefixFilter:行键前缀过滤器   

代码语言:javascript
复制
scan 'test',FILTER=>"PrefixFilter('row0')"

    说明:把test表中rowkey 以row0开头的数据查出来 FirstKeyOnlyFilter:扫描全表,显示每个逻辑行的第一个键值对

代码语言:javascript
复制
 scan 'test',FILTER=>"FirstKeyOnlyFilter()"

    说明:一个rowkey可以有多个version,同一个rowkey的同一个column也会有多个的值,只拿出key中的第一个column的第一个version 列簇与列过滤器 FamilyFilter:针对列族进行比较和过滤

代码语言:javascript
复制
  scan 'test',FILTER=>"FamilyFilter(=,'substring:f1')"

    说明:查询列簇前缀以“f1”开头的数据 QualifierFilter:列标识过滤器

代码语言:javascript
复制
 scan 'test',FILTER=>"QualifierFilter(=,'substring:name')"

    说明:查询所有列簇中列名是name的列数据     ColumnPrefixFilter:对列名前缀进行过滤

代码语言:javascript
复制
scan 'test',FILTER=>"ColumnPrefixFilter('n')"

    说明:查询所有列簇中列以“n”开头的数据 MultipleColumnPrefixFilter:可以指定多个前缀  

代码语言:javascript
复制
scan 'test',FILTER=>"MultipleColumnPrefixFilter('n','m')"

    说明:查询test表,所有列簇中列名以“n“或者”m"开头的数据 ColumnRangeFilter:设置范围按字典序对列名进行过滤 

代码语言:javascript
复制
 scan 'test',FILTER=>"ColumnRangeFilter('name',true,'music',false)"

    说明:ColumnRangeFilter过滤器则可以扫描出符合过滤条件的列范围,起始和终止列名用单引号引用,true 和 false 参数可指明结果中包含的起始或终止列。 值过滤器 ValueFilter:值过滤器,找到符合值条件的键值对

代码语言:javascript
复制
    模糊查找:scan 'test', FILTER => "ValueFilter(=,'substring:张')"

    说明:查询test表中,所有列值为以“张”开头的数据

    精确查询:scan 'test', FILTER => "ValueFilter(=,'binary:张三')"

    说明:查询test表中,所有列值为“张三”的数据

    注意1:ValueFilter 过滤器可以利用 get 和 scan 方法对单元格进行过滤,但是使用 get 方法时,需要指定行键

SingleColumnValueFilter:在指定的列族和列中进行比较的值过滤器

代码语言:javascript
复制
 scan 'test', {FILTER => "SingleColumnValueFilter('liecuA', 'name', =, 'substring:张')",FORMATTER => 'toString'}

    说明:查询test表,列簇:liecuA 下 name列以“张”开头的数据

    注意:如果查询的数据存在没有liecuA:name 对应值得数据也会展示出啦

    解决方案:HBase入门:shell模糊查询_u011236069的博客-CSDN博客   注意事项2

SingleColumnValueExcludeFilter:排除匹配成功的值

代码语言:javascript
复制
   scan 'test', {FILTER => "SingleColumnValueExcludeFilter('liecuA', 'name', =, 'substring:张')",FORMATTER => 'toString'}

其他过滤器         还有一些其他的过滤器,比如与分页,时间等 ColumnCountGetFilter:限制每个逻辑行返回键值对的个数,在 get 方法中使用

代码语言:javascript
复制
  get 'test', 'row1', FILTER => "ColumnCountGetFilter(3)"

    说明:查询test表行键为“row1”的数据,只允许显示3列

TimestampsFilter:时间戳过滤,支持等值,可以设置多个时间戳

代码语言:javascript
复制
    scan 'test', Filter => "TimestampsFilter(1636561062,1636993106)"

    说明: 注意Filter需要再使用前进行导入

PageFilter:对查询结果按行进行分页显示

代码语言:javascript
复制
  scan 'test', { STARTROW => 'row1', ENDROW => 'row5', FILTER => "PageFilter(3)" }

    说明:查询test表根据行键从“row1”到“row5” 查询3行数据

ColumnPaginationFilter:对一行的所有列分页,只返回 [offset,offset+limit] 范围内的列

代码语言:javascript
复制
  scan 'test', { STARTROW => 'row1', ENDROW => 'row5', FILTER => "ColumnPaginationFilter(2,1)" }

    说明:ColumnPaginationFilter过滤器对一个逻辑行的所有列进行分页显示。 

总结         一次查询可以使用多个Filter进行多维度筛选 ,各Filter之间使用关系运算符:AND 或 OR 进行连接,请使用大些字母避免使用shell 方式查找无效!!!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档