有没有办法限制Hbase中的列数

时间:2011-03-16 10:05:57

标签: hadoop hbase schema

有没有办法限制Hbase中特定行下的列数?我见过限制行的方法。我想知道是否有任何方法可以限制列族值

像,

row columnfamily(page)value
1页:1 1
1页:2 2
1页:3 3

我需要为列族页面检索row1值:1和page:2
可能吗?

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);