我在Hbase中有一些数据。键的结构类似于 userID(Integer)+ dateTimeInMillis(Long)。我过去使用以下代码来获取范围之间的行:
Scan scan = new Scan(startKey.array(), endKey.array());
scan.addFamily(Bytes.toBytes(""));
ResultScanner result = table.getScanner(scan);
我需要知道userIds和TimeStamps才能查询行。 我的一位同事建议我使用fuzzyRowFilter扫描数据进行测试,我发现它非常有用。我使用fuzzyRowFilter玩了一下。这就是我能够在一天内针对所有userID实现结果的方式。
List<Pair<byte[], byte[]>> keys = new ArrayList<Pair<byte[], byte[]>>();
keys.add(new Pair<byte[], byte[]>(
startKey.array(), new byte[] { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }));
Filter filter = new FuzzyRowFilter(keys);
Scan scan = new Scan();
scan.addFamily(Bytes.toBytes("d"));
scan.setFilter(filter);
我无法根据我的用例调整此过滤器。我找不到任何指定范围的方法。我试着在网上搜索。大多数开发人员表示此过滤器尚不支持该范围。有人提出了使用多个过滤器的建议。 除了使用多个过滤器之外,还有更好的方法来指定范围。 我尝试将我的密钥的最后一个字节设置为&#34; 1&#34;为了获得更好的结果,但它并没有像我期望的那样成功。如果有人知道更好的方法来应用带范围的fuzzyRowFilter或者已经实现了自定义范围过滤器,我将不胜感激如果我能从他那里得到任何想法以获得最大性能。
此致