如何使用Java API扫描accumulo仅使用行。例如,当我使用accumulo shell扫描表时,accumulo具有以下行条目:
12lj314t1u43td1 Documents:Entity [U] {values}
我知道Java中的row是'12lj314t1u43td1'。我想检索所有可能的列族和限定符的{values}
。我已经检查了扫描器上的accumulo文档,但是它们没有说明如何将Ranges设置为仅根据行返回。
如果只有一个您感兴趣的行id,那么您可以使用Scanner来完成此操作:
Scanner scanner = connector.createScanner(myTable, new Authorizations("U"));
scanner.setRange(new Range("12lj314t1u43td1"));
for(Entry<Key,Value> entry : scanner){
System.out.println(entry);
}
这将给你每一行"12lj314t1u43td1"。如果您只想要包含Documents cf的行,则在
setRange
行之后添加此行。scanner.fetchColumnFamily(new Text("Documents"));
或者如果你只想要文档和实体CQ,你可以做
scanner.fetchColumn(new Text("Documents"), new Text("Entity"));
如果您正在寻找许多不连续的行,那么您可能想要尝试BatchScanner
。也可以使用无数的迭代器和正则表达式,但这应该能满足您的需求。
您可以使用scan -b startRow -e endRow
在shell中扫描范围。更多选项见scan --help
。
注意:如果你想要性能,你应该使用Java API,但这给你一个shell的范围。