在Accumulo中查找没有特定列族的行?

时间:2013-12-28 16:42:31

标签: accumulo

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

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

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

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

1 个答案:

答案 0 :(得分:3)

在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需要在内存中缓冲整行以完成您所要求的内容。如果您的行包含许多列,则此方法将使您的内存不足。如果每行有1,000列(每个键值为1KB),则服务器必须保留1MB内存。如果您没有宽列,这不是问题。此示例还取决于1.5.0,但此代码可以针对任何版本的Accumulo运行(如果您在测试用例中更改了一些API调用)。