如何仅使用rowid使用Java API扫描 accumulo 。例如,当我使用 accumulo shell扫描表时, accumulo 具有以下行条目:
12lj314t1u43td1 Documents:Entity [U] {values}
我知道Java中的rowid是' 12lj314t1u43td1'。我想为所有可能的列族和限定符检索{values}
。我已经检查了扫描仪上的 accumulo 文档,但是他们没有说明如何将范围设置为仅基于rowid返回。
答案 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的范围。