有没有一种直接的方法可以在 Accumulo 中找到没有特定列族的行?
例如,这里有一些简单的示例数据(省略时间戳和可见性):
r|cf|cq|v
1|A | |
2|A | |
2|B | |
3|A | |
3|B | |
4|C | |
我想创建一个扫描仪来查找没有“B”列族的行。在这种情况下,它将返回第 1 行和第 4 行。
有没有一种直接的方法可以在 Accumulo 中找到没有特定列族的行?
例如,这里有一些简单的示例数据(省略时间戳和可见性):
r|cf|cq|v
1|A | |
2|A | |
2|B | |
3|A | |
3|B | |
4|C | |
我想创建一个扫描仪来查找没有“B”列族的行。在这种情况下,它将返回第 1 行和第 4 行。
Accumulo 中没有可以使用的特定 API 调用,但这是一个很好的例子,说明了 Accumulo 的 (SortedKeyValue)Iterator 概念为何很酷。我们可以编写少量代码并在服务器上而不是在客户端上执行此过滤。
而不是让你挂,这里有一些代码: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 调用)。