是否有一种直接的方法可以在Accumulo中找到没有特定列族的行?
例如,这里有一些简单的示例数据(省略时间戳和可见性):
r|cf|cq|v
1|A | |
2|A | |
2|B | |
3|A | |
3|B | |
4|C | |
我想创建一个查找没有“B”列族的行的扫描程序。在这种情况下,它将返回第1行和第4行。
答案 0 :(得分:3)
在Accumulo中没有可以使用的特定API调用,但这是为什么Accumulo(SortedKeyValue)迭代器概念很酷的一个很好的例子。我们可以编写少量代码并在服务器上而不是在客户端上执行此过滤。
不是让你挂,而是这里有一些代码:https://github.com/joshelser/RowsWithoutColumns
具体来说,您可以找到迭代器:https://github.com/joshelser/RowsWithoutColumns/blob/master/src/main/java/accumulo/RowsWithoutColumnIterator.java
需要注意的一点是,RowsWithoutColumnIterator需要在内存中缓冲整行以完成您所要求的内容。如果您的行包含许多列,则此方法将使您的内存不足。如果每行有1,000列(每个键值为1KB),则服务器必须保留1MB内存。如果您没有宽列,这不是问题。此示例还取决于1.5.0,但此代码可以针对任何版本的Accumulo运行(如果您在测试用例中更改了一些API调用)。