HBase,如何获取rowkies列表的列表?

时间:2013-11-19 14:43:36

标签: hbase

我有一个rowkeys列表,我想为每个rowkey获取特定的列。 我找到的唯一方法是在循环中使用get命令。 有没有更好的方法呢?

我将描述确切的用例:

我的桌子每行约有50列。

我想为每一行提取20列,这些列至少有一列在给定时间范围内更新。

我实施它的方式:

  • 使用时间范围和列表
  • 扫描表格
  • 从响应中获取所有行键(包含原始键和在时间范围内更新的列)
  • 循环,用列列表
  • 为每个行键创建get请求
  • 执行批量请求。
  • 将完整数据(每行20列)转储到文件
  • 我正在寻找一种更优雅,更有效的方法。

    由于

    2 个答案:

    答案 0 :(得分:0)

    HBase将允许您批量Get操作,这样只需要一个网络请求就可以获得多行的结果。

    请注意HTable.get获取Get个对象列表,所以只需构建一个获取列表然后再调用一次HTable.get:

    List<Get> gets = new ArrayList<Get>();
    for (/* all rowkeys */) {
        Get g = new Get(row);
        g.addColumn(col1);
        g.addColumn(col2); 
        // ...
       gets.add(g);  
     }
    
    Result[] r = htable.get(gets);
    

    答案 1 :(得分:0)

    我觉得你需要像 DependentColumnFilter 这样的东西。 DependentColumnFilter允许我们指定一个控制其他列过滤方式的引用列。它使用引用列的时间戳,并包含具有相同时间戳的所有其他列。

    构造函数:

    DependentColumnFilter(byte[] family, byte[] qualifier)
    DependentColumnFilter(byte[] family, byte[] qualifier, boolean dropDependentColumn)
    DependentColumnFilter(byte[] family, byte[] qualifier, boolean dropDependentColumn, CompareOp valueCompareOp, WritableByteArrayComparable valueComparator)
    

    此外,根据值,您可以选择其他列。

    虽然有一个问题。此过滤器与扫描操作的批次功能不兼容。

    HTH