我有一个rowkeys列表,我想为每个rowkey获取特定的列。 我找到的唯一方法是在循环中使用get命令。 有没有更好的方法呢?
我将描述确切的用例:
我的桌子每行约有50列。
我想为每一行提取20列,这些列至少有一列在给定时间范围内更新。
我正在寻找一种更优雅,更有效的方法。
由于
答案 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