是否有一种简单的方法可以在Accumulo中查找没有特定列族的行?
例如,这里有一些简单的示例数据(省略了时间戳和可见性):
r|cf|cq|v
1|A | |
2|A | |
2|B | |
3|A | |
3|B | |
4|C | |
我想创建一个扫描仪,用于查找没有"B"列族的行。在这种情况下,它将返回第1行和第4行。
在Accumulo中没有特定的API调用可以使用,但这是一个很好的例子,说明为什么Accumulo的(SortedKeyValue)迭代器概念很酷。我们可以编写少量代码,并在服务器上而不是在客户端上执行此筛选。
这里有一些代码,而不是让你悬着不放: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需要在内存中缓冲整行以完成您的要求。如果行中有许多列,这种方法将耗尽内存。如果每行有1000列(每个键值为1KB),则服务器必须在内存中保留1MB。如果没有宽列,这就不是问题。此示例也依赖于1.5.0,但此代码可以针对任何版本的Accumulo运行(如果您在测试用例中更改了一些API调用)。