使用 get 或 scan 操作从 hbase 读取数据时, 可以使用自定义筛选器将结果子集返回到客户端。虽然这不会减少服务器端 io, 但它确实会减少网络带宽, 并减少客户端需要处理的数据量。筛选器通常使用 java api, 但可从 hbase 命令行用于测试和调试目的。
有关 hbase 中获取和扫描的详细信息, 请参阅从 hbase 读取数据.
动态加载自定义筛选器
默认情况下, cdh 能够通过将带有筛选器的 jar 添加到hbase.dynamic.jars.dir属性指定的目录 (默认为 hbase 根目录下的lib/ ) 来动态加载自定义筛选器。
若要禁用动态 jar 的自动加载, 请hbase-site.xml . xml 的高级配置代码段中将hbase.use.dynamic.jarsfalse (如果使用 cloudera 管理器), 或者hbase-site.xml . xml. false
筛选语法指南
hbase 筛选器采用零个或多个参数, 在括号中。如果参数是字符串, 则由单引号 (“字符串”) 包围。
逻辑运算符、比较运算符和比较器
筛选器可以与逻辑运算符组合在一起。某些筛选器采用比较运算符和比较器的组合。以下是每个文件的列表。
逻辑运算符
and-键值必须传递要包含在结果中的两个筛选器。
or-键值必须传递至少一个要包含在结果中的筛选器。
skip-对于特定行, 如果任何键值未通过筛选条件, 则跳过整行。
while-对于特定行, 它将继续发出键值, 直到达到无法使用筛选条件的键值。
复合筛选器-使用这些运算符, 可以创建筛选器的层次结构。例如:
(Filter1 AND Filter2)OR(Filter3 AND Filter4)
比较运算符
少 (& lt;)
少 _ 或 _ 平等 (& lt; =)
相等 (=)
不 _ 平等 (! =)
伟大的 _ or _ equal (& gt; =)
伟大的 (& gt;)
no _ op (无操作)
比较
双字节比较器-词典记录与指定的字节数组Bytes.compareTo(byte[], byte[])方法进行比较。
-词典记录与指定的字节数组进行比较。它只比较此字节数组的长度。
-使用给定的正则表达式与指定的字节数组进行比较。只有EQUAL和NOT_EQUAL比较对这个比较器是有效的。
子字符串比较器-测试给定的子字符串是否出现在指定的字节数组中。比较不区分大小写。只有EQUAL和NOT_EQUAL比较对这个比较器是有效的。
例子
Example1: >, ‘binary:abc’ will match everything that is lexicographically greater than “abc”
Example2: =, ‘binaryprefix:abc’ will match everything whose first 3 characters are lexicographically equal to “abc”
Example3: !=, ‘regexstring:ab*yz’ will match everything that doesn’t begin with “ab” and ends with “yz”
Example4: =, ‘substring:abc123’ will match everything that begins with the substring “abc123”
复合运算符
在表达式中, 括号可用于将子句组合在一起, 括号具有最高的优先级。
SKIP是 skip 和WHILE运算符, 并且具有相同的优先级。
接下来是AND运算符。
OR运算符。
例子
A filter string of the form: “Filter1 AND Filter2 OR Filter3” will be evaluated as: “(Filter1 AND Filter2) OR Filter3”
A filter string of the form: “Filter1 AND SKIP Filter2 OR Filter3” will be evaluated as: “(Filter1 AND (SKIP Filter2)) OR Filter3”
筛选器类型
hbase 包括几种筛选器类型, 以及将筛选器组合在一起并创建自己的自定义筛选器的能力。
键式筛选器-不接受任何参数。返回每个键值对的键部分。
Syntax: KeyOnlyFilter ()
第一次 keyonlyfilter -不接受任何参数。返回第一个键值对的键部分。
Syntax: FirstKeyOnlyFilter ()
预修复器-采用单个参数, 行键的前缀。它只返回以指定行前缀开头的行中存在的键值
Syntax: PrefixFilter (‘<row_prefix>’)
Example: PrefixFilter (‘Row’)
列预置筛选器-采用单个参数, 列前缀。它只返回以指定列前缀开头的列中存在的键值。
Syntax: ColumnPrefixFilter (‘<column_prefix>’)
Example: ColumnPrefixFilter (‘Col’)
多列前缀筛选器-获取列前缀的列表。它返回以任何指定的列前缀开头的列中存在的键值。
Syntax: MultipleColumnPrefixFilter (‘<column_prefix>’, ‘<column_prefix>’, …, ‘<column_prefix>’)
Example: MultipleColumnPrefixFilter (‘Col1’, ‘Col2’)
列计数 getfilter -采用一个参数, 一个限制。它返回表中的第一个limit列数。
Syntax: ColumnCountGetFilter (‘’)
Example: ColumnCountGetFilter (4)
页面筛选器-采用一个参数, 一个页面大小。它返回表page size行数。
Syntax: PageFilter (‘<page_size>’)
Example: PageFilter (2)
列 paginationfilter -采用两个参数, 一个限制和偏移量。它返回偏移量后的限制列数。它对所有行执行此操作。
Syntax: ColumnPaginationFilter (‘’, ‘’)
Example: ColumnPaginationFilte