Hbase shell中使用Filter过滤器总结
在hbase shel1中使用过滤器的格式为
#可以通过show_filters查询当前版本支持的所有过滤器
scan '表名',{FILTER=>"过滤器"}
在使用scan的时候如果不加上startRow和endRow那么都是全局检索,并且startRow和endRow是前闭后开的,查询的结果不包括endRow。
RowFilter
行键过滤器
查询hbase:meta表中rowkey中包含123的数据。
scan 'hbase:meta', {FILTER=> "RowFilter(=,'substring:123')"}
ValueFilter
值过滤器
查询hbase:meta表中值包含123的数据,因为hbase在存储的时候是以key-value格式的列式存储,在查询遍历的时候每行每列都会遍历,所以才有这个过滤器.
除了可以查询等于,也可以查询大于、大于等于、小于、小于等于、不等于,比较的方式是字典排序。
除非在数据存储的时候存储的类型为数字类型。
substring:包含的意思、binary:精确查询、regexstring:正则匹配、null:空值比较、long:数字比较
scan 'hbase:meta',{FILTER=> "ValueFilter(=,'substring:123')"}
SingleColumnValueFilter
单列值过滤器
查询hbase :meta表中列簇为info.列名为server的所有数据。
注意:在使用单列值过滤器必须保证每行数据都有要查询的列,因为查询结果也会返回没有要查询的列的整行记录。
scan 'hbase:meta',{FILTER=>"SingleColumnValueFilter('info','server',=,'binary:chds-2:60020')"}
PrefixFilter
行键前缀过滤器
查询hbase:meta表中行键以123开头的所有数据
scan 'hbase:meta',{FILTER=>"PrefixFilter('123')"}
ColumnPrefixFilter
单列名前缀过滤器
查询hbase:meta表中以server开头的列的所有数据
scan 'hbase:meta',{FILTER=>"ColumnPrefixFilter('server')"}
MultipleColumnPrefixFilter
多列名前缀过滤器
查询hbase:meta表中以server和regioninfo开头的列的所有数据
scan 'hbase:meta',{FILTER=>"MultipleColumnPrefixFilter('servedr','regioninfo')"}
PageFilter
分页过滤器
分页过滤器要和startRow搭配使用,和LIMIT功能类似。
过滤器搭配使用的时候分页过滤器要放在最后。
但是如果是页面开发使用java api操作,分页过滤器有一个缺点就是必须一页一页翻页,因为要传递startRow的值,和ES的深度分页类似
scan 'hbase:meta',{FILTER=>"PageFilter(2)",STARTROW=>''}
scan 'hbase:meta',{LIMIT=>2,STARTROW=>''}
InclusiveStopFilter
包含结尾过滤器
endRow在使用过程中查询结果不包括endRow,可以搭配使用这个过滤器。
scan 'hbase:meta',{STARTROW=>'',ENDROW=>'',FILTER=>"InclusiveStopFilter('')"}
FamilyFilter
列簇过滤器
scan 'hbase:meta',{FILTER=>"FamilyFilter(=,'binary:info')"}
QualifierFilter
列名过滤器
scan 'hbase:meta',{FILTER=>"QualifierFilter(=,'binary:server')"}
SingleColumnValueExcludeFilter
单列值不包含过滤器,和单列值过滤器类似
scan 'hbase:meta',{FILTER=>"SingleColumnValueExcludeFilter('info','server',=,'binary:chds-2:60020')"}