OceanBase
English日本語简体中文
ドキュメントホーム
製品
エコシステム
リリース

データベース

OceanBase CloudOceanBaseデータベース

データベース

OceanBase CloudOceanBaseデータベース
OceanBase CloudOceanBaseデータベース

OceanBaseデータベース

KV - V4.4.2
  • OBKVの概要
  • OBKVのアーキテクチャ
  • OBKV-Table
    • OBKV-Table概要
      • OBKV-Tableの概要
      • OBKV-Tableのコア機能
      • OBKV-Tableデプロイの概要
    • シンプルなKey-Valueストレージのクイックスタート(Java)
    • OBKV-Table Javaクライアントを使ったアプリケーション開発
      • OBKV-Table Java開発ガイド
      • OBKV-Table開発の準備
      • OBKV-Table Javaクライアントを使用してクラスタに接続する
      • OBKV-Table操作例
        • OBKV-Tableへのデータ書き込み
        • OBKV-Tableによるデータのクエリ
        • OBKV-Tableでのデータ更新
        • OBKV-Tableによるデータの削除
      • OBKV-Table Javaクライアントのパラメータ設定
    • OBKV-Table管理
      • OBKV-Table管理の概要
      • OBKV-Tableの高可用性
      • OBKV-Tableのセキュリティ権限
      • OBKV-Tableモニタリングメトリクス
    • OBKV-Tableリファレンス
      • OBKV-Tableのデータモデル
      • OBKV-Tableの操作タイプ
      • OBKV-Tableがサポートするデータ型
      • OBKV-Table全文インデックス
      • OBKV-Tableのグローバルインデックスの使用範囲と例
      • OBKV-Tableの期限切れデータ削除
      • OBKV-Tableのグループコミット
      • OBKV-Tableの弱い整合性読み取りと最寄りデータセンターからの読み取り
      • OBKV-Table関連ビュー
    • OBKV-Table よくある質問
  • OBKV-HBase
    • OBKV-HBaseの概要
    • OBKV-HBaseのコア機能
    • OBKV-HBaseのデプロイ
    • OBKV-HBaseによるアプリケーション開発
      • OBKV-HBase アプリケーション開発の概要
      • OBKV-HBase Javaクライアントを使用したクラスタへの接続
      • HBaseの業務コードをOBKV-HBaseに移行する
      • OBKV-HBase データ操作の例
    • OBKV-HBase 移行ガイド
    • OBKV-HBase管理
      • OBKV-HBase管理の概要
      • OBKV-HBaseの高可用性
      • OBKV-HBaseのセキュリティ権限
      • OBKV-HBaseモニタリングメトリクス
    • OBKV-HBaseクエリの最適化
    • OBKV-HBaseの性能テスト
    • OBKV-HBaseリファレンス
      • OBKV-HBaseデータモデル
      • OBKV-HBaseのデータスキーマ
      • HBaseとの互換インターフェース
      • HBaseと互換性のあるフィルター
      • OBKV-HBaseの自動パーティション分割
      • OBKV-HBaseにおける期限切れデータの削除
      • OBKV-HBaseの弱い整合性読み取りと最寄りデータセンターからの読み取り
      • OBKV-HBase関連ビュー
    • OBKV-HBaseエコシステム統合
      • Flink連携
        • Flinkコネクタを使用してOBKV-HBaseにデータを同期する
        • ネイティブFlinkによるOBKV-HBaseへのアクセス
      • HiveによるOBKV-HBaseへのアクセス
      • SparkによるOBKV-HBaseへのアクセス
  • OBKVリリースノート
    • OBKV Enterprise版

PDF をダウンロード

ドキュメントフィードバック
  1. ドキュメントセンター
  2. OceanBaseデータベース
  3. KV
  4. V4.4.2

HBaseと互換性のあるフィルター

最終更新:2026-09-30 06:35:08

Filterの互換性に関する説明と例
columnPrefixFilter
columnPaginationFilter
firstKeyOnlyFilter
keyOnlyFilter
randomRowFilter
timestampsFilter
DependentColumnFilter
SingleColumnValueExcludeFilter
ColumnRangeFilter
MultipleColumnPrefixFilter
MultiRowRangeFilter
InclusiveStopFilter
FirstKeyValueMatchingQualifiersFilter
FamilyFilter
FuzzyRowFilter
ColumnValueFilter

OBKV-HBaseクライアントは、Filterインターフェースを実装しています。この記事では、OBKV-HBaseがオープンソースのHBaseフィルター(Filter)とどの程度互換性があるかについて説明します。

Filterの互換性に関する説明と例

columnPrefixFilter

columnPrefixFilterは列名のプレフィックスをフィルタリングするためのフィルターです。

指定された文字列を列名のプレフィックスとして持つすべての列を返します。ユーザーはフィルタリングに使用するプレフィックス文字列を指定する必要があります。

例:

abc で始まるすべての列名を持つデータを見つけます。

byte[] prefix = Bytes.toBytes("abc");
columnPrefixFilter f = new columnPrefixFilter(prefix);
scan.setFilter(f);

columnPaginationFilter

columnPaginationFilterは、返される列数を制限するためのフィルターです。

指定された列から、指定された数の列(最新バージョンのセル)を返し、列ページネーションに使用します。オフセット(offset)または指定列(columnOffset)と返却数(limit)を設定する必要があります。

例:

q 列から始めて、3列のデータを返します。

byte[] col = Bytes.toBytes("q");
columnPaginationFilter f = new columnPaginationFilter(3, col);
scan.setFilter(f);

firstKeyOnlyFilter

firstKeyOnlyFilterは、各行の最初のデータユニット(セル)を返します。

例:

各行の最初のデータユニット(セル)を返します。

firstKeyOnlyFilter f = new firstKeyOnlyFilter();
scan.setFilter(f);

keyOnlyFilter

keyOnlyFilterは、value以外のすべてのデータ情報を返します。

パラメータを指定するかどうかは任意です。デフォルトで指定しない場合、各行のcomponentのみを返し、valueは返しません。lenAsValというパラメータを指定することができます。これはブール値であり、trueの場合、valueの長さをvalueの代わりに使用して返します。

例:

valueの長さをvalueの代わりに使用して返します。

keyOnlyFilter f = new keyOnlyFilter(true);
scan.setFilter(f);

randomRowFilter

randomRowFilterは行フィルターであり、行データの一部をランダムに選択するために使用されます。このフィルターはランダムサンプリングを実現するために使用でき、一定の確率に基づいて各行を保持するかどうかを決定します。

例:

0.3の確率でデータをランダムにフィルタリングします。

randomRowFilter f = new randomRowFilter(0.3);
scan.setFilter(f);

timestampsFilter

timestampsFilterはタイムスタンプフィルターです。指定されたタイムスタンプに基づいてデータをフィルタリングし、一致するデータを保持します。

2つのパラメータを指定できます。1つ目はタイムスタンプのリストで、必須項目です。保持するデータのタイムスタンプを提供します。2つ目のパラメータはbool値で、オプションです。デフォルト値はfalseで、SEEK_NEXT_USING_HINTを使用できるかどうかを示します。

例:

タイムスタンプが3と4のデータを返します。

ArrayList<Long> timestamps = new ArrayList<>();
timestamps.add(new Long(3));
timestamps.add(new Long(4));
timestampsFilter filter = new timestampsFilter(timestamps);
scan.setFilter(f);

DependentColumnFilter

DependentColumnFilterは、特定の値を含む列をフィルタリングするために使用される依存列フィルターです。

少なくとも2つのパラメータが必要です:カラムファミリーと列名。各行に対応するデータセルを見つけ、そのデータセルと同じタイムスタンプを持つすべてのキー・バリュー・ペアを返します。 3番目のパラメータdropDependentColumnを指定することもできます。デフォルトはfalseです。trueに設定すると、指定されたデータセルをスキップし、同じタイムスタンプを持つ他のキー・バリュー・ペアのみを返します。 さらに、4番目と5番目のパラメータであるCompareOperatorとByteArrayComparableを指定することもできます。これにより、データセルを比較してフィルタリングできます。

例:

カラムファミリーがfamily_group、列名がcolumn1、データ値がvalue2のデータセルを返し、それとタイムスタンプが同じ他のすべてのデータセルを返します。

DependentColumnFilter filter = new DependentColumnFilter(
    Bytes.toBytes("family_group"),
    Bytes.toBytes("column1"),
    false,
    CompareFilter.CompareOp.EQUAL,
    new BinaryComparator(toBytes("value2"))
    );
scan.setFilter(filter);

SingleColumnValueExcludeFilter

SingleColumnValueExcludeFilterは、特定の値を含む列をフィルタリングするために使用される列値フィルターです。

例:

テストデータセットを以下のように準備します:

RowKey: key1||||ColumnFamily: cf||||Column Qualifier: column1||||Value: value1||||Timestampsss: 1723797655011
RowKey: key1||||ColumnFamily: cf||||Column Qualifier: column2||||Value: value2||||Timestampsss: 1723797655270
RowKey: key2||||ColumnFamily: cf||||Column Qualifier: column2||||Value: value2||||Timestampsss: 1723797655404
RowKey: row1||||ColumnFamily: cf||||Column Qualifier: column1||||Value: v1||||Timestampsss: 1723537364927
RowKey: row2||||ColumnFamily: cf||||Column Qualifier: column1||||Value: ||||Timestampsss: 1723537384827
  1. FilterをSingleColumnValueFilterに設定します:

    SingleColumnValueFilter filter = new SingleColumnValueFilter(
    "cf".getBytes(),
    "column2".getBytes(),
    CompareFilter.CompareOp.EQUAL,
        new BinaryComparator(toBytes(value2))
        );
    scan.setFilter(filter);
    

    実行結果は次のとおりです:

    RowKey: key1||||ColumnFamily: cf||||Column Qualifier: column1||||Value: value1||||Timestampsss: 1723797632274
    RowKey: key1||||ColumnFamily: cf||||Column Qualifier: column2||||Value: value2||||Timestampsss: 1723797632504
    RowKey: key2||||ColumnFamily: cf||||Column Qualifier: column2||||Value: value2||||Timestampsss: 1723797632622
    RowKey: row1||||ColumnFamily: cf||||Column Qualifier: column1||||Value: v1||||Timestampsss: 1723537364927
    RowKey: row2||||ColumnFamily: cf||||Column Qualifier: column1||||Value: ||||Timestampsss: 1723537384827
    

    結果は期待通りです。

  2. FilterをSingleColumnValueExcludeFilterに再設定します:

    SingleColumnValueExcludeFilter filter = new SingleColumnValueExcludeFilter(
        "cf".getBytes(),
        "column2".getBytes(),
        CompareFilter.CompareOp.EQUAL,
        new BinaryComparator(toBytes(value2))
        );
    scan.setFilter(filter);
    

    実行結果は次のとおりです:

    RowKey: key1||||ColumnFamily: cf||||Column Qualifier: column1||||Value: value1||||Timestampsss: 1723797613418
    RowKey: row1||||ColumnFamily: cf||||Column Qualifier: column1||||Value: v1||||Timestampsss: 1723537364927
    RowKey: row2||||ColumnFamily: cf||||Column Qualifier: column1||||Value: ||||Timestampsss: 1723537384827
    

    結果には上記のすべての行が含まれていますが、指定された値または比較条件に一致する列は除外されており、これも期待通りです。

ColumnRangeFilter

ColumnRangeFilterは列範囲フィルターであり、指定された範囲内の列のみを保持します。

区間の下限と上限、および各境界を含むかどうかを指定します。下限がNULLまたは空文字列の場合は下限なし、上限がNULLまたは空文字列の場合は上限なしを意味します。

例:

cfカラムファミリー、column1からcolumn2までの列名を持つデータを返します。column1は含まれ、column2は含まれません。

byte[] startColumn = Bytes.toBytes("column1");
byte[] endColumn = Bytes.toBytes("column2");
Filter f = new ColumnRangeFilter(startColumn, true, endColumn, false);

MultipleColumnPrefixFilter

MultipleColumnPrefixFilterは、特定の接頭辞を含む列をフィルタリングするために使用される複数列プレフィックスフィルターです。

複数の列名プレフィックスを指定でき、パラメータの数は固定ではありません。

例:

column1 または column2 の接頭辞を持つ列に一致します。

byte[][] prefixes = new byte[][] {Bytes.toBytes("column1"), Bytes.toBytes("column2")};
Filter f = new MultipleColumnPrefixFilter(prefixes);

MultiRowRangeFilter

MultiRowRangeFilterは、指定された範囲内の行をフィルタリングするために使用される複数行範囲フィルターです。

MultiRowRangeFilter の入力パラメータは、複数の RowRange オブジェクトを含むリストです。各 RowRange オブジェクトは、区間の上限、下限、および区間が開区間か閉区間かを定義します。また、ユーザーは複数のプレフィックスを直接パラメータとして指定することもできます。HBaseクライアントは、これらのプレフィックスを自動的に RowRange オブジェクトに変換して保存します。ただし、MultiRowRangeFilter には少なくとも1つの RowRange オブジェクトをパラメータとして指定する必要があります。

例:

row1からrow2までの範囲と、row3からrow4までの範囲のデータを返します。境界のうちrow1のみを含み、row2、row3、row4は含みません。

List<MultiRowRangeFilter.RowRange> ranges = new ArrayList<MultiRowRangeFilter.RowRange>();
ranges.add(new MultiRowRangeFilter.RowRange("row3", false, "row4", false));
ranges.add(new MultiRowRangeFilter.RowRange("row1", true, "row2", false));
MultiRowRangeFilter f = new MultiRowRangeFilter(ranges);

InclusiveStopFilter

InclusiveStopFilterは、指定された終了行を含めて、その行までのすべての行を返すフィルターです。

例:

row1 までのすべての行を返します。

Filter f = new InclusiveStopFilter(Bytes.toBytes("row1"));

FirstKeyValueMatchingQualifiersFilter

FirstKeyValueMatchingQualifiersFilterは、特定の列名(qualifier)を持つデータユニットをマッチングするフィルターです。指定された列名に一致する最初のデータユニットを見つけるまで、すべてのデータユニットを返します。複数の列名をマッチング条件として指定することができます。

例:

各行について、列名がcolumn0またはcolumn1に一致する最初のセルが見つかるまで、セルを返します。

TreeSet<byte []> set = new TreeSet<>(Bytes.BYTES_COMPARATOR);
set.add(Bytes.toBytes("column0"));
set.add(Bytes.toBytes("column1"));
Filter f = new FirstKeyValueMatchingQualifiersFilter(set);

FamilyFilter

FamilyFilterは、特定のカラムファミリーを含むデータユニットをフィルタリングするために使用されるカラムファミリーフィルターです。

FamilyFilterはカラムファミリー名に基づいてデータをフィルタリングします。ユーザーは、カラムファミリー名を比較するための比較演算子(<, <=, =, >, >=, !=)とコンパレーター(デフォルトではバイナリコンパレーター)を指定できます。

例:

FamilyFilterを使用して、カラムファミリー名がcf1のデータをフィルタリングします。

FamilyFilter f = new FamilyFilter(CompareOperator.NOT_EQUAL,
    new BinaryComparator(Bytes.toBytes("cf1")));

FuzzyRowFilter

FuzzyRowFilterは、特定の行キーを含むデータユニットをフィルタリングするためのあいまい行フィルターです。

FuzzyRowFilterは行キー(Rowkey)に基づくあいまい一致フィルターであり、1つまたは複数の一致ルール(rowkey key, fuzzy info)をカスタマイズして行キーをフィルタリングできます。ここで、fuzzy infoは行キーと同じ長さのバイト配列であり、fuzzy infoの各バイトについて以下のようになります:

  • fuzzy infoのあるバイトが0の場合、対応する位置の行キーバイトは指定されたバイトと同じでなければなりません。
  • fuzzy infoのあるバイトが1の場合、対応する位置の行キーバイトは任意の値に設定できます。

例:

行キーの形式がuserId_actionId_year_monthであると仮定します。ここで、userIdは4バイト、actionIdは2バイト、yearは4バイト、monthは2バイトを占めます。1月にaction "99"を実行したユーザーを検索するには、以下のクエリを使用できます:

List<Pair<byte[], byte[]>> data = new ArrayList<>();
byte[] fuzzyKey = "????_99_????_01".getBytes();
byte[] fuzzyInfo = new byte[] {1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0};
data.add(new Pair<byte[], byte[]>(fuzzyKey, fuzzyInfo));
FuzzyRowFilter f = new FuzzyRowFilter(data);

ColumnValueFilter

ColumnValueFilterは、特定の値を含む列をフィルタリングするための列値フィルターです。

指定された列の内容をフィルタリングし、ユーザーが指定した比較タイプと内容に基づいてデータセルをフィルタリングし、条件に合致するデータセルを返します。パラメータとして、フィルタリングするカラムファミリー、列名、比較タイプ、比較内容を指定する必要があります。

例:

cf というカラムファミリー名、column という列名、値が value のデータを取得します。

ColumnValueFilter filter = new ColumnValueFilter(
  cf,
  column,
  CompareOperaor.EQUAL,
  Bytes.toBytes("value")
  );
scan.setFilter(filter);

前のトピック

HBaseとの互換インターフェース
前へ

次のトピック

OBKV-HBaseの自動パーティション分割
次へ
このページの内容
Filterの互換性に関する説明と例
columnPrefixFilter
columnPaginationFilter
firstKeyOnlyFilter
keyOnlyFilter
randomRowFilter
timestampsFilter
DependentColumnFilter
SingleColumnValueExcludeFilter
ColumnRangeFilter
MultipleColumnPrefixFilter
MultiRowRangeFilter
InclusiveStopFilter
FirstKeyValueMatchingQualifiersFilter
FamilyFilter
FuzzyRowFilter
ColumnValueFilter