使用rowid扫描accumulo

时间:2014-03-20 04:49:51

标签: java accumulo

如何仅使用rowid使用Java API扫描 accumulo 。例如,当我使用 accumulo shell扫描表时, accumulo 具有以下行条目:

12lj314t1u43td1 Documents:Entity [U] {values}

我知道Java中的rowid是' 12lj314t1u43td1'。我想为所有可能的列族和限定符检索{values}。我已经检查了扫描仪上的 accumulo 文档,但是他们没有说明如何将范围设置为仅基于rowid返回。

2 个答案:

答案 0 :(得分:4)

如果只有一个您感兴趣的rowID,那么您可以使用扫描仪来完成此任务:

Scanner scanner = connector.createScanner(myTable, new Authorizations("U"));
scanner.setRange(new Range("12lj314t1u43td1"));

for(Entry<Key,Value> entry : scanner){
    System.out.println(entry);
}

这会给你每一个&#34; 12lj314t1u43td1&#34;行。如果您只想要包含文档cf的行,请在setRange

之后添加此行
scanner.fetchColumnFamily(new Text("Documents"));

或者如果您只想要具有实体CQ的文档,那么

scanner.fetchColumn(new Text("Documents"), new Text("Entity"));

如果您要查找大量不连续的行,那么您可能需要尝试BatchScanner。也可以使用无数的迭代器和正则表达式,但这应该可以得到你想要的东西。

答案 1 :(得分:2)

您可以使用scan -b startRow -e endRow扫描shell中的范围。有关更多选项,请参阅scan --help

注意:如果你想要性能,你应该使用Java API,但这可以获得shell的范围。