是否在不检索数据的情况下获取范围内的HBase行键?

是否在不检索数据的情况下获取范围内的HBase行键?,hbase,Hbase,是否有一种方法可以检索给定范围内的行键,而不实际检索与该行键关联的列/cf 澄清一下:在我的示例中,我们的表的行键是股票代码名称(例如GOOG),在我们的web应用程序中,我们希望仅使用数据库中的行键来填充自动完成小部件。显然,如果我们在用户键入“G”时检索G和H之间所有股票的所有数据(而不是股票名称),我们将不必要地使系统紧张。有什么想法吗?您可以使用addFamily(byte[]family)或addFamily(byte[]family,byte[]qualifier)仅检索相关数据一种

是否有一种方法可以检索给定范围内的行键,而不实际检索与该行键关联的列/cf


澄清一下:在我的示例中,我们的表的行键是股票代码名称(例如GOOG),在我们的web应用程序中,我们希望仅使用数据库中的行键来填充自动完成小部件。显然,如果我们在用户键入“G”时检索G和H之间所有股票的所有数据(而不是股票名称),我们将不必要地使系统紧张。有什么想法吗?

您可以使用addFamily(byte[]family)或addFamily(byte[]family,byte[]qualifier)仅检索相关数据

一种方法是维护另一个索引表,该索引表具有针对所有股票的所有可能FSA状态的键。因此,下一次每当用户键入“G”时,您所要做的就是点击此表并检索与G相关的所有值的逗号分隔列表。

我将创建一个名为“empty:”的列族,并为所有行存储空值。现在,您只需请求加载列“empty:”。这并不理想,但比加载包含大量数据的列族要好

看看过滤器(http://hbase.apache.org/book/client.filter.html),尤其是KeyOnlyFilter。过滤器(by)的说明如下所示

仅返回每个KV的关键组件的过滤器(值将重写为空)


要限制特定范围内的键,请使用Scan(rowStart,rowEnd)构造函数

根据官方文档,您可以使用两个过滤器的组合(KeyOnlyFilter和FirstKeyOnlyFilter)以最佳方式仅检索行键。(我认为“FirstKeyOnlyFilter”将只返回一次密钥,即使是大型复杂行也是如此。)如果您只需要给定范围内的密钥,可以将该范围添加到扫描仪中

下面是一些示例代码:

FilterList filters = new FilterList(FilterList.Operator.MUST_PASS_ALL,
            new FirstKeyOnlyFilter(),
            new KeyOnlyFilter());
Scan s = new Scan(filters);
// in order to limit the scan to a range
s.setStartRow(startRowKey);  // first key in range
s.setStopRow(stopRowKey);    // key value after the last key in the range
资料来源: