hbase的內容查詢(2)
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協議,轉載請註明來源