【问题标题】:hbase api - get data rows information by list of row idshbase api - 通过行 ID 列表获取数据行信息
【发布时间】:2012-10-29 21:53:41
【问题描述】:

是否可以通过hbase java API通过row id列表获取hbase数据记录?

例如,我有一个已知的 hbase 行 ID 列表:

mykey1:myhash1, mykey1:myhash2, mykey1:myhash3, mykey2:myhash5, ...

我想通过一次调用来获得所有相关的列单元格信息。我对 hbase 很陌生,我不知道 API 是否支持这一点。

API 伪代码:

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

类似的东西?

我可以用Get(byte[] rowName)从单行检索信息,但是当我有rowIds列表时,我需要多次执行get操作,这会导致建立连接并在每次完成时关闭它。

谢谢

【问题讨论】:

    标签: java api hbase


    【解决方案1】:

    Get 操作列表传递给 batch 调用:

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

    【讨论】:

    • 如果表中没有一个键,那么 Result[] 将为空。有没有表现更好的api?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 2018-03-08
      相关资源
      最近更新 更多