3

hbase java APIを介して行IDのリストによってhbaseデータレコードを取得することは可能ですか?

たとえば、hbase行IDの既知のリストがあります。

mykey1:myhash1、mykey1:myhash2、mykey1:myhash3、mykey2:myhash5、..。

そして、関連するすべての列セル情報をhbaseに1回呼び出すだけで取得したいと思います。私はhbaseを初めて使用しますが、これがAPIでサポートされているかどうかもわかりません。

API擬似コード:

GetById(String tableName, List<byte[]> rowIds);

そんな感じ?

を使用して単一の行から情報を取得できますGet(byte[] rowName)が、rowIdのリストがある場合、getアクションを数回実行する必要があります。これにより、接続が確立され、完了するたびに閉じられます。

ありがとう

4

2 に答える 2

15

Get操作のリストをバッチ呼び出しに渡します。

...
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;
...
        HTable htable = null;
        try {
            htable = new HTable(conf, "mytable");
            List<Get> queryRowList = new ArrayList<Get>();
            queryRowList.add(new Get(Bytes.toBytes("mykey1:myhash1")));
            queryRowList.add(new Get(Bytes.toBytes("mykey1:myhash2")));
            queryRowList.add(new Get(Bytes.toBytes("mykey1:myhash3")));
            queryRowList.add(new Get(Bytes.toBytes("mykey2:myhash5")));

            Result[] results = htable.get(queryRowList);
            for (Result r : results) {
                //do something
            }
        }
        finally {
            if (htable != null) {
                htable.close();
            }
        }
...
于 2012-11-11T20:24:02.817 に答える
0

MultiActionは、バッチで実行できる複数のget(またはput、delete、およびそれらの組み合わせ)のコンテナーとして使用できます。

ただし、毎回接続を閉じたり再度開いたりしなくても、複数のget操作を実行できることに注意してください。

于 2012-11-09T16:51:23.847 に答える