首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

HBase FilterList 巢狀組合:實現 AND/OR 混合邏輯

     編輯:程式設計疑難解答

FilterList 基本用法

// 單層:只能全 AND 或全 OR
FilterList list = new FilterList(Operator.MUST_PASS_ALL); // AND
// 或
FilterList list = new FilterList(Operator.MUST_PASS_ONE);  // OR

混合邏輯:巢狀 FilterList

FilterList 可包含 FilterList**,遞迴組合任意邏輯。

// 邏輯:(A AND B) OR (C AND D)
FilterList innerAnd1 = new FilterList(Operator.MUST_PASS_ALL);
innerAnd1.addFilter(filterA);
innerAnd1.addFilter(filterB);

FilterList innerAnd2 = new FilterList(Operator.MUST_PASS_ALL);
innerAnd2.addFilter(filterC);
innerAnd2.addFilter(filterD);

FilterList outerOr = new FilterList(Operator.MUST_PASS_ONE);
outerOr.addFilter(innerAnd1);
outerOr.addFilter(innerAnd2);

scan.setFilter(outerOr);

對應 SQL 邏輯

FilterList 結構SQL 等價
MUST_PASS_ALL (A, B)A AND B
MUST_PASS_ONE (A, B)A OR B
MUST_PASS_ALL ( MUST_PASS_ONE(A,B), C )(A OR B) AND C

效能提示

  • 越早過濾掉資料越好:將選擇率高 (過濾力強) 的 Filter 放在外層或前面。
  • 避免在 RowFilter 中做複雜計算,優先用 SingleColumnValueFilter、PrefixFilter 等原生 Filter。
  • 大量資料考慮 Filter.ReturnCode.INCLUDE_AND_NEXT_COL 跳過剩餘欄位。

總結

HBase FilterList **支援巢狀**,透過遞迴組合可實現任意 AND/OR 混合邏輯。設計時注意過濾順序與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved