HBase 过滤器 及shell 操作过滤器

比较器描述
BinaryComparator匹配完整字节数组
BinaryPrefixComparator匹配字节数组前缀
BitComparator匹配比特位
NullComparator匹配空值
RegexStringComparator匹配正则表达式
SubstringComparator匹配子字符串

行键过滤器

RowFilter实现行键字符串的比较和过滤scan 'Student', FILTER => "RowFilter(=,'substring:0001')"
行键过滤器描述示例
PrefixFilter行键前缀比较器,比较行键前缀scan 'Student', FILTER => "PrefixFilter('0001')"

scan 'Student', FILTER => "RowFilter(=,'substring:0001')"
KeyOnlyFilter只对单元格的键进行过滤和显示,不显示值scan 'Student', FILTER => "KeyOnlyFilter()"
FirstKeyOnlyFilter只扫描显示相同键的第一个单元格,其键值对会显示出来scan 'Student', FILTER => "FirstKeyOnlyFilter()"
InclusiveStopFilter替代 ENDROW 返回终止条件行scan 'Student', { STARTROW => '0001', FIILTER => "InclusiveStopFilter('binary:0002')" }

scan 'Student', { STARTROW => '0001', ENDROW => '0003' }

列族与列过滤器

针对列族进行过滤的过滤器为 FamilyFilter,其语法结构与 RowFilter 类似,不同之处在于 FamilyFilter 是对列族名称进行过滤的。

例如,以下命令扫描Student表显示列族为 Grades 的行。

scan 'Student', FILTER=>" FamilyFilter(= , 'substring:Grades')"

 
列过滤器描述示例
QualifierFilter列标识过滤器,只显示对应列名的数据scan 'Student', FILTER => "QualifierFilter(=,'substring:Math')"
ColumnPrefixFilter对列名称的前缀进行过滤scan 'Student', FILTER => "ColumnPrefixFilter('Ma')"
MultipleColumnPrefixFilter可以指定多个前缀对列名称过滤scan 'Student', FILTER => "MultipleColumnPrefixFilter('Ma','Ag')"
ColumnRangeFilter过滤列名称的范围scan 'Student', FILTER => "ColumnRangeFilter('Big',true,'Math',false')"

上表中 QualifierFilter 和 ColumnPrefixFilter 过滤效果类似,只是 ColumnPrefixFilter 无须结合运算符和比较器即可完成字符串前缀的过滤。

MultipleColumnPrefixFilter 过滤器是对 ColumnPrefixFilter 的延伸,可以一次过滤多个列前缀。

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

值过滤器

在 HBase 的过滤器中也有针对单元格进行扫描的过滤器,即值过滤器,如下表所示。
 

值过滤器描述
值过滤器描述示例
ValueFilter值过滤器,找到符合值条件的键值对scan 'Student', FILTER => "ValueFilter(=,'substring:curry')"

get 'Student', '0001', FILTER => "ValueFilter(=,'substring:curry')"
SingleColumnValueFilter在指定的列族和列中进行比较的值过滤器scan 'Student', Filter => "SingleColumnValueFilter('StuInfo', 'Name', =, 'binary:curry')"
SingleColumnValueExcludeFilter排除匹配成功的值scan 'Student', Filter => "SingleColumnValueExcludeFilter('StuInfo', 'Name', =, 'binary:curry')"

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

SingleColumnValueFilter 和 SingleColumnValueExcludeFilter 过滤器扫描的结果是相反的, 都需要在过滤条件中指定列族和列的名称。

其他过滤器

还有一些其他的过滤器,其过滤方式和示例如下表所示。
 

其他过滤器描述
值过滤器描述示例
ColumnCountGetFilter限制每个逻辑行返回键值对的个数,在 get 方法中使用get 'Student', '0001', FILTER => "ColumnCountGetFilter(3)"
TimestampsFilter时间戳过滤,支持等值,可以设置多个时间戳scan 'Student', Filter => "TimestampsFilter(1,4)"
InclusiveStopFilter设置停止行scan 'Student', { STARTROW => '0001', ENDROW => '0005', FILTER => "InclusiveStopFilter('0003')" }
PageFilter对显示结果按行进行分页显示scan 'Student', { STARTROW => '0001', ENDROW => '0005', FILTER => "PageFilter(3)" }
ColumnPaginationFilter对一行的所有列分页,只返回 [offset,offset+limit] 范围内的列scan 'Student', { STARTROW => '0001', ENDROW => '0005', FILTER => "ColumnPaginationFilter(2,1)" }

ColumnCountGetFilter 过滤器限制每个逻辑行返回多少列,一般不用在 scan 方法中,Timestamps Filter 匹配相同时间戳的数据。

InclusiveStopFilter过滤器设置停止行,且包含停止的行,上表中示例最终展示数据为行键 0001〜0003 范围内的数据。PageFilter 设置每页最多显示多少逻辑行, 示例中显示三个逻辑行。

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

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值