web-dev-qa-db-ja.com

行キーの一部でHBaseのスキャンをどのようにフィルタリングしますか?

次のように、テキストIDとタイムスタンプで構成される行キーを持つHBaseテーブルがあります。

...
string_id1.1470913344067
string_id1.1470913345067
string_id2.1470913344067
string_id2.1470913345067
...

HBaseのスキャン(ScalaまたはJava))をフィルター処理して、文字列IDとタイムスタンプが値よりも大きい結果を取得するにはどうすればよいですか?

ありがとう

8

ファジー行アプローチは、この種の要件に対して効率的であり、データが膨大な場合:これで説明されているように article FuzzyRowFilterはパラメーターとして行キーとマスク情報を取ります。

上記の例では、最後にログインしたユーザーを検索する必要があり、行キーの形式がuserId_actionId_timestampuserIdの長さは4文字に固定されています)の場合、探しているファジー行キーは次のようになります。 ????_login_。これは、FuzzyRowKeyの次のパラメータに変換されます。

FuzzyRowFilter rowFilter = new FuzzyRowFilter(
 Arrays.asList(
  new Pair<byte[], byte[]>(
    Bytes.toBytesBinary("\x00\x00\x00\x00_login_"),
    new byte[] {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0})));

Hbase-the-definitiveガイドを通過することをお勧めします-> クライアントAPI:高度な機能

5
Ram Ghadiyaram