Anirudh Todi 在HBASE-4176对过HBase滤器语言进行了描述。本文基于Todi的文档。
本文作者:周海汉
日期:2012-8-22
本文永久更新地址:http://abloz.com/2012/08/22/the-hbases-content-query-2.html
作者网站:http://abloz.com/
通用过滤器语法
“FilterName (argument, argument, … , argument)”
过滤器名+用括号括起来的并用逗号隔开的参数列表。如果参数是字符串,用单引号引起来。字符串内如果有单引号,则前面必须再加一个单引号。
如果是boolean, integer 或comparison operator 如 <, >, !=等,不要用单引号引用。
过滤器名是一个单词的ASCII,不要有单引号,括号,空格。
复合过滤和操作
包括二元操作AND/OR 和一元操作 SKIP/WHILE.
操作符必须大写
AND —— 键值必须同时通过两个Filter
OR —— 键值必须通过两个Filter之一
SKIP—— 对某一行,任何键值对没有通过过滤器,则整行忽略。
WHILE—— 对某一行,持续发出键值对,直到某一键值对没有通过过滤器
复合过滤语法:
“(Filter1 AND Filter2) OR (Filter3 AND Filter4)”
1). 优先级
括号()优先级最高
其次是SKIP和WHILE, 优先级一样
AND第三
OR优先级最低
示例:
“Filter1 AND Filter2 OR Filter3” 等价于_“(Filter1 AND Filter2) OR Filter3”_
“Filter1 AND SKIP Filter2 OR Filter3” 等价于_“(Filter1 AND (SKIP Filter2)) OR Filter3”_
比较操作符和比较器(Comparator)
1). 比较操作符
包括
-
LESS (<)
-
LESS_OR_EQUAL (<=)
-
EQUAL (=)
-
NOT_EQUAL (!=)
-
GREATER_OR_EQUAL (>=)
-
GREATER (>)
-
NO_OP (no operation)
Client应用用符号(<, <=, =, !=, >, >=) 来表达比较操作
2). 比较器
包括
-
BinaryComparator – 按字节索引顺序比较指定字节数组,采用Bytes.compareTo(byte[], byte[])
-
BinaryPrefixComparator - 按字节索引顺序比较指定字节数组,仅比较到字节数组的长度。
-
RegexStringComparator – 与指定字节数组比较,采用指定正则表达式。仅_EQUAL 和 NOT_EQUAL _比较操作符对其有效。
-
SubStringComparator – 检测给出子串是否出现在指定的字节数组里。比较大小写不敏感。仅_EQUAL 和 NOT_EQUAL _比较操作符对其有效。
比较器语法: ComparatorType:ComparatorValue
比较器对应的类型(ComparatorType)如下:
-
BinaryComparator - binary
-
BinaryPrefixComparator - binaryprefix
-
RegexStringComparator - regexstring
-
SubStringComparator - substring
比较器值(ComparatorValue)可以是任何值。
示例
Example1:
, ‘binary:abc’ 匹配索引序大于”abc”的所有情况。
Example2:
=, ‘binaryprefix:abc’ 匹配任何前三个字符是”abc”的情况。
Example3:
!=, ‘regexstring:ab*yz’ 匹配任何不以ab开始且不以yz结束的情况。
Example4:
=, ‘substring:abc123’ 匹配具有子串”abc123”的任何情况。
过滤器字符串示例
- “PrefixFilter (‘Row’) AND PageFilter (1) AND FirstKeyOnlyFilter ()”
返回所有 key-value 对匹配如下条件
1) 行的 key-value 有前缀 “Row”
2) key-value 必须在表的第一行找到
3) key-value 对必须是行的第一个key-value对
- “(RowFilter (=, ‘binary:Row 1’) AND TimeStampsFilter (74689, 89734)) OR ColumnRangeFilter (‘abc’, true, ‘xyz’, false))”
返回键值对同时匹配下列条件:
1) key-value 具有键 “Row 1”
2) key-value有timestamp 74689 或 89734之一
或匹配
1) key-value对必须在列名字典索引序 >= abc 且 < xyz
- “SKIP ValueFilter (0)”
任何Value不是0,则跳过整行。
单独过滤器语法
1). KeyOnlyFilter
Description: 该过滤器无參,仅返回Key。
Syntax: KeyOnlyFilter ()
Example: “KeyOnlyFilter ()”
2). FirstKeyOnlyFilter
Description: 该过滤器无參,每行仅返回第一个键值。
Syntax: FirstKeyOnlyFilter ()
Example: “FirstKeyOnlyFilter ()”
3). PrefixFilter
Description: 该过滤器一个参数 —— 行键前缀,返回行键前缀为指定参数的行。
Syntax: PrefixFilter (‘
Example: “PrefixFilter (‘Row’)”
4). ColumnPrefixFilter
Description: 该过滤器有一个参数 ——列名称前缀。
Syntax: ColumnPrefixFilter (‘
Example: “ColumnPrefixFilter (‘Col’)”
5). MultipleColumnPrefixFilter
Description: 一个列名称前缀参数列表,返回匹配任何列前缀之一的键值对。
Syntax: MultipleColumnPrefixFilter (‘
Example: “MultipleColumnPrefixFilter (‘Col1’, ‘Col2’)”
6). ColumnCountGetFilter
Description: 一个参数——限制值. 返回表中第一个到达限制列数的列。
Syntax: ColumnCountGetFilter (‘
Example: “ColumnCountGetFilter (4)”
7). PageFilter
Description: 该过滤器有一个参数 —— 页大小,返回表中页大小指定的行数。
Syntax: PageFilter (‘
Example: “PageFilter (2)”
8). ColumnPaginationFilter
Description: 该过滤器有两个参数 —— 限制值和偏移量。返回偏移量开始限制值个数列。影响所有行。
Syntax: ColumnPaginationFilter (‘
Example: “ColumnPaginationFilter (3, 5)”
9). InclusiveStopFilter
Description: 该过滤器有一个参数 —— 停止扫描的行键。返回所有键值对直到包含停止扫描的行。
Syntax: InclusiveStopFilter (‘
Example: “InclusiveStopFilter (‘Row2’)”
10). TimeStampsFilter
Description: 该过滤器有一个时间戳参数列表。返回所有匹配时间戳之一的键值对。
Syntax: TimeStampsFilter (
Example: “TimeStampsFilter (5985489, 48895495, 58489845945)”
11). RowFilter
Description: 该过滤器有一个比较操作符和一个比较器。将比较器和每行用比较操作符比较,如果返回真,则返回该行所有键值对。
Syntax: RowFilter (
Example: “RowFilter (<=, ‘binary:xyz)”
12). Family Filter
Description: 该过滤器有一个比较操作符和一个比较器。将比较器和每个列族用比较操作符比较,如果返回真,则返回该列族所有键值对。
Syntax: FamilyFilter (
Example: “FamilyFilter (>=, ‘binaryprefix:FamilyB’)”
13). QualifierFilter
Description: 该过滤器有一个比较操作符和一个比较器。将比较器和每个列(修饰)用比较操作符比较,如果返回真,则返回该列所有键值对。
Syntax: QualifierFilter (
Example: “QualifierFilter (=, ‘substring:Column1’)”
14). ValueFilter
Description: 该过滤器有一个比较操作符和一个比较器。将比较器和每个值用比较操作符比较,如果返回真,则返回该键值对。
Syntax: ValueFilter (
Example: “ValueFilter (!=, ‘binary:Value’)”
15). DependentColumnFilter
**Description: **该过滤器有两个参数 —— 列族和列修饰。 尝试找到该列所在的每一行,并返回该行具有相同时间戳的全部键值对。如果某一行不包含指定的列,则该行的任何键值对都不返回。
该过滤器还可以有一个可选布尔参数 —— dropDependentColumn. 如果为true, 从属的列不返回。
该过滤器还可以有两个可选参数 —— 一个比较操作符和一个值比较器,用于列族和修饰的进一步检查。如果从属的列找到,其值还必须通过值检查,然后就是时间戳必须考虑。
Syntax: DependentColumnFilter (‘
DependentColumnFilter (‘
DependentColumnFilter (‘
Example: “DependentColumnFilter (‘conf’, ‘blacklist’, false, >=, ‘zebra’)”
“DependentColumnFilter (‘conf’, ‘blacklist’, true)”
“DependentColumnFilter (‘conf’, ‘blacklist’)”
16). SingleColumnValueFilter
Description: 该过滤器有一个列族,一个列修饰,一个比较操作符和一个比较器做参数。如果某行没有找到指定列,该行的所有列都会发出来。如果找到列,且比较操作返回真,该行的所有列会发出来。如果失败,则该行不发出来。
该过滤器也有两个可选布尔参数——filterIfColumnMissing 和 setLatestVersionOnly
如果 filterIfColumnMissing 标志设为真,如果该行没有指定的列,那么该行的所有列将不发出。缺省值为假。
如果setLatestVersionOnly 标志设为假,将检查此前的版本。缺省值为真。
该可选参数要么不设,要么两个都设。
Syntax: SingleColumnValueFilter ‘
Syntax: SingleColumnValueFilter (‘
Example: “SingleColumnValueFilter (‘FamilyA’, ‘Column1’, <=, ‘abc’, true, false)”
Example: “SingleColumnValueFilter (FamilyA’, ‘Column1’, <=, ‘abc’)”
17). SingleColumnValueExcludeFilter
Description: 该过滤器具有SingleColumnValueFilter 一样的参数和行为。 然而,如果找到列,且比较操作返回真,该行的所有列会发出来。
Syntax: SingleColumnValueExcludeFilter (
Syntax: SingleColumnValueExcludeFilter (
Example: “SingleColumnValueExcludeFilter (‘FamilyA’, ‘Column1’, ‘<=’, ‘abc’, ‘false’, ‘true’)”
Example: “SingleColumnValueExcludeFilter (‘FamilyA’, ‘Column1’, ‘<=’, ‘abc’)”
18). ColumnRangeFilter
Description: 该过滤器用于选择列在minColumn 和 maxColumn之间的键。
该过滤器也有两个可选布尔参数用于指示是否包含minColumn 和 maxColumn 。
如果不指定 minColumn 或 the maxColumn ——可以不传参数。
Syntax: ColumnRangeFilter (‘
Example: “ColumnRangeFilter (‘abc’, true, ‘xyz’, false)”
如非注明转载, 均为原创. 本站遵循知识共享CC协议,转载请注明来源