1

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

12lj314t1u43td1 Documents:Entity [U] {values}

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

4

2 回答 2

4

如果您只对一个 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. 也可以使用无数的迭代器和正则表达式,但这应该能得到你想要的。

于 2014-03-20T12:06:05.777 回答
2

您可以使用 扫描 shell 中的某个范围scan -b startRow -e endRow。查看scan --help更多选项。

注意:如果你想要性能,你应该使用 Java API,但这会给你一个 shell 的范围。

于 2014-03-21T01:55:35.843 回答