5

因此,如果我在 Bigtable 中有以下数据:

DEL_6878 .....
DEL_6879 .....
BOM_5876 .....
SFO_8686 .....
SFO_8687 .....

如何查询 SFO* 记录?我阅读了文档;我知道如何获得单行;类似的东西:

table.get("SFO_8686");

或者如何获取范围;类似getRows("SFO_8686", "SFO _8687")which 接受startKeyand的东西endKey,但我在文档中阅读并相信可以获取以前缀开头的记录;SFO* 示例。我怎么做?

4

2 回答 2

3

我认为运行具有范围的扫描是您最有效的选择。您还可以使用带有 的org.apache.hadoop.hbase.filter.RowFilter扫描RegexStringComparator

于 2016-07-20T14:26:47.863 回答
3

根据我的经验,PrefixFilter 适用于部分行键 * 样式的扫描,并且从我设法挖掘出来的内容中,除此之外设置开始行和结束行应该可以提高性能(大概是通过避免完全扫描):

PrefixFilter px = new PrefixFilter(Bytes.toBytes(rowKey));
Scan s = new Scan();
s.setStartRow(Bytes.toBytes(rowKey));
s.setFilter(px);
...

另外,从我从这个讨论中了解到: HBase (Easy): How to Perform Range Prefix Scan in hbase shell 是在 shell 环境中,'ROWPREFIXFILTER' 旨在结合上述两个元素:

scan 'TableName', {ROWPREFIXFILTER => 'SFO'}

但是我还没有设法找到与之类似的java,如果那是你所追求的。如果其他人有的话会很有帮助!

于 2016-12-17T22:29:30.073 回答