有没有办法限制Hbase中特定行下的列数?我见过限制行的方法。我想知道是否有任何方法可以限制列族值
像,
row columnfamily(page)value
1页:1 1
1页:2 2
1页:3 3
我需要为列族页面检索row1值:1和page:2
可能吗?
答案 0 :(得分:0)
有可能。
扫描时使用http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Scan.html#addColumn(byte[], byte[])
使用时 http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/client/Get.html#addColumn(byte[], byte[])
如果列键是可预测的,例如,key是索引,那么基于特定值,可以通过迭代添加键。此外,如果调节可能是随机且复杂的,例如>也可以使用滤波器。 1和< 3,键入(3,10,11)等。过滤器使用this。有大量预先实施的filters。您可能会对qualifier filter感兴趣。
希望这有帮助。
答案 1 :(得分:0)
您可以通过多种不同方式解决此问题。基本上,您需要服务器端过滤器来限制Get / Scan中的返回数据。通常情况下,这可以通过协处理器完成,但仍处于开发阶段,因此您确实希望对查询应用过滤器。
示例过滤器:http://svn.apache.org/repos/asf/hbase/branches/0.90/src/main/java/org/apache/hadoop/hbase/filter/
最简单的例子是前缀过滤器(虽然看起来你想要某种范围过滤器)。只是为了让您大致了解这是如何工作的,以下是如何将PrefixFilter应用于Get:
HTable myTable; // predefined
Scan scan; // predefined
scan.setFilter(new ColumnPrefixFilter(Bytes.toBytes("myprefix")));
return myTable.getScanner(scan);