1. 程式人生 > >hbase的內容查詢(2)

hbase的內容查詢(2)

2012-08-22

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).             比較操作符

包括

  1. LESS (<)

  2. LESS_OR_EQUAL (<=)

  3. EQUAL (=)

  4. NOT_EQUAL (!=)

  5. GREATER_OR_EQUAL (>=)

  6. GREATER (>)

  7. NO_OP (no operation)

Client應用用符號(<, <=, =, !=, >, >=) 來表達比較操作

 2).             比較器

包括

  1. BinaryComparator – 按位元組索引順序比較指定位元組陣列,採用Bytes.compareTo(byte[], byte[])

  2. BinaryPrefixComparator - 按位元組索引順序比較指定位元組陣列,僅比較到位元組陣列的長度。

  3. RegexStringComparator – 與指定位元組陣列比較,採用指定正則表示式。僅_EQUAL NOT_EQUAL _比較操作符對其有效。

  4. SubStringComparator – 檢測給出子串是否出現在指定的位元組數組裡。比較大小寫不敏感。僅_EQUAL NOT_EQUAL _比較操作符對其有效。

比較器語法: ComparatorType:ComparatorValue

比較器對應的型別(ComparatorType)如下:

  1. BinaryComparator - binary

  2. BinaryPrefixComparator - binaryprefix

  3. RegexStringComparator - regexstring

  4. 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 (‘’, ‘’, , , ‘<value comparator’)

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協議,轉載請註明來源