有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaHBase api通过行ID列表获取数据行信息

是否可以通过hbase java API通过行ID列表获取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操作,这会导致建立连接并在每次完成时关闭它

谢谢


共 (2) 个答案

  1. # 1 楼答案

    您可以使用MultiAction作为多个get(或put、delete和它们的组合)的容器,这些get(或put、delete和组合)可以批量执行

    也就是说,请注意,您可以执行多个get操作,而无需每次关闭/重新打开连接

  2. # 2 楼答案

    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();
                }
            }
    ...