程序中hbase過濾查詢

hbase是我們大數(shù)據(jù)經(jīng)常使用的一個數(shù)據(jù)庫,我們經(jīng)常需要根據(jù)某些條件去hbase獲取需要的數(shù)據(jù),本文主要聊一下我在項目中用到的過濾查詢(基于scan查詢)。

行鍵過濾器RowFilter

new RowFilter(CompareOperator.EQUAL, new BinaryPrefixComparator("".getBytes()))

列族過濾器FamilyFilter

new FamilyFilter(CompareOperator.EQUAL, new BinaryPrefixComparator("".getBytes()))

列過濾器QualifierFilter

new QualifierFilter(CompareOperator.EQUAL, new BinaryPrefixComparator("".getBytes()))

值過濾器ValueFilter

new ValueFilter(CompareOperator.EQUAL, new BinaryPrefixComparator("".getBytes()))

過濾器的第一個參數(shù)是邏輯條件,hbase默認的有

public enum CompareOperator {
  /** less than */
  LESS,
  /** less than or equal to */
  LESS_OR_EQUAL,
  /** equals */
  EQUAL,
  /** not equal */
  NOT_EQUAL,
  /** greater than or equal to */
  GREATER_OR_EQUAL,
  /** greater than */
  GREATER,
  /** no operation */
  NO_OP,
}

第二個參數(shù)是過濾條件,常用方式有

// 前綴比較
new BinaryPrefixComparator("".getBytes())
// 全值比較
new BinaryComparator("".getBytes())
// 是否包含
new SubstringComparator("")
// 正則匹配
new RegexStringComparator("")

hbase還支持多個過濾條件組合查詢,可以通過FilterList。hbase默認支持多個過濾器之間的關系是交還是并。

val filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL)

public enum Operator {
    /** !AND */
    MUST_PASS_ALL,
    /** !OR */
    MUST_PASS_ONE
  }

如果過濾器之間想實現(xiàn)括號的功能(f1 && f2)|| f3類似這樣的需求,可以使用多個FilterList即可

val filterList1 = new FilterList(FilterList.Operator.MUST_PASS_ALL)
val filterList2 = new FilterList(FilterList.Operator.MUST_PASS_ONE)
filterList1.addFilter(filterList2)

時間戳過濾器TimestampsFilter
這里需要注意是時間戳過濾器的參數(shù)需要的java類型的數(shù)據(jù)結(jié)構(gòu),所有List和Long我們需要顯式的指定是java類

val arrayList = new util.ArrayList[lang.Long]()
arrayList.add(123L)
new TimestampsFilter(arrayList)

單值過濾器SingleColumnValueFilter
可以直接過濾出需要的value值

new SingleColumnValueFilter(family.getBytes(), "is_matched".getBytes(), CompareOperator.NOT_EQUAL, "1".getBytes())

以上是筆者使用過的過濾器,當然hbase還有其他的過濾器,有需要的小伙伴可以自行官網(wǎng)查詢使用。

歡迎對技術感興趣的小伙伴一起交流學習^^

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 一、簡介 Hbase:全名Hadoop DataBase,是一種開源的,可伸縮的,嚴格一致性(并非最終一致性)的分...
    菜鳥小玄閱讀 2,605評論 0 12
  • 目錄: 引言 -- 參數(shù)基礎 1. 結(jié)構(gòu)(Structural)過濾器--FilterList 2.列值過濾器--...
    磊寶萬歲閱讀 1,635評論 0 2
  • [TOC] 一、Filter 介紹 一般來說調(diào)整表設計就可以優(yōu)化訪問模式。但是有時已經(jīng)把表設計調(diào)整得盡可能好了,為...
    w1992wishes閱讀 2,329評論 0 0
  • HBase 的基本 API,包括增、刪、改、查等。查詢可以根據(jù) Rowkey 進行 Get 或根據(jù) Rowkey ...
    Alex90閱讀 9,309評論 0 2
  • Zookeeper用于集群主備切換。 YARN讓集群具備更好的擴展性。 Spark沒有存儲能力。 Spark的Ma...
    Yobhel閱讀 7,604評論 0 34

友情鏈接更多精彩內(nèi)容