如何使用 Java API仅使用 rowid扫描accumulo 。例如,当我使用accumulo shell扫描表时, accumulo具有以下行条目:
12lj314t1u43td1 Documents:Entity [U] {values}
我知道Java中的rowid是'12lj314t1u43td1'。我想检索{values}
所有可能的列族和限定符。我已经检查了扫描仪上的accumulo文档,但他们没有说明如何将 Ranges 设置为仅基于 rowid 返回。
如果您只对一个 rowID 感兴趣,则可以使用 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
. 也可以使用无数的迭代器和正则表达式,但这应该能得到你想要的。
您可以使用 扫描 shell 中的某个范围scan -b startRow -e endRow
。查看scan --help
更多选项。
注意:如果你想要性能,你应该使用 Java API,但这会给你一个 shell 的范围。