是否可以通过hbase java API按行列表列表获取hbase数据记录?
例如,我有一个已知的hbase行id列表:
mykey1:myhash1, mykey1:myhash2, mykey1:myhash3, mykey2:myhash5, ...
我希望单独调用hbase所有相关的列单元格信息。我对hbase很新,我不知道这是否支持API。
API伪代码:
GetById(String tableName, List<byte[]> rowIds);
那样的东西?
我可以使用Get(byte[] rowName)
从单行检索信息,但是当我有rowId列表时,我需要多次执行get动作,这会导致建立连接并在每次完成时关闭它。
由于
答案 0 :(得分: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();
}
}
...
答案 1 :(得分:0)
您可以使用MultiAction作为可以批量执行的多个get(或put,delete及其组合)的容器。
也就是说,请注意,您可以执行多次获取操作,而无需每次都关闭/重新打开连接。