HBase 过滤器 及shell 操作过滤器

转自:https://blog.csdn.net/weixin_43603028/article/details/107253178

比较器 描述
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过滤器对一个逻辑行的所有列进行分页显示。
————————————————
版权声明:本文为CSDN博主「driver1999」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43603028/article/details/107253178

posted @ 2021-07-08 20:16  志不坚者智不达  阅读(624)  评论(0编辑  收藏  举报