1

有没有一种直接的方法可以在 Accumulo 中找到没有特定列族的行?

例如,这里有一些简单的示例数据(省略时间戳和可见性):

r|cf|cq|v
1|A |  | 
2|A |  | 
2|B |  |  
3|A |  | 
3|B |  |
4|C |  |

我想创建一个扫描仪来查找没有“B”列族的行。在这种情况下,它将返回第 1 行和第 4 行。

4

1 回答 1

3

Accumulo 中没有可以使用的特定 API 调用,但这是一个很好的例子,说明了 Accumulo 的 (SortedKeyValue)Iterator 概念为何很酷。我们可以编写少量代码并在服务器上而不是在客户端上执行此过滤。

而不是让你挂,这里有一些代码:https ://github.com/joshelser/RowsWithoutColumns

具体来说,您可以找到迭代器:https ://github.com/joshelser/RowsWithoutColumns/blob/master/src/main/java/accumulo/RowsWithoutColumnIterator.java

还有一些调用它的代码:https ://github.com/joshelser/RowsWithoutColumns/blob/master/src/test/java/test/RowsWithoutColumnIteratorTest.java

需要注意的几件事,RowsWithoutColumnIterator 需要在内存中缓冲整行来完成您的要求。如果您有许多列的行,这种方法会使您内存不足。如果每行有 1,000 列(每个键值是 1KB),则服务器必须在内存中保留 1MB。如果您没有宽列,这不是问题。此示例也依赖于 1.5.0,但此代码可以针对任何版本的 Accumulo 运行(如果您更改测试用例中的某些 API 调用)。

于 2013-12-29T04:05:23.253 回答