我在hbase中有一些数据。密钥的结构类似于userid(整数)+datetimeinmillis(长)。我以前使用以下代码来获取范围之间的行:
Scan scan = new Scan(startKey.array(), endKey.array());
scan.addFamily(Bytes.toBytes(""));
ResultScanner result = table.getScanner(scan);
我需要知道userid和时间戳以便查询行。我的一个同事建议我使用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);
我无法根据我的用例调整此过滤器。我找不到任何指定范围的方法。我试着在网上搜索。大多数开发人员都说这个过滤器还不支持这个范围。有些人建议使用多个过滤器。除了使用多个过滤器,没有更好的方法来指定范围吗。为了得到更好的结果,我试着把键的最后一个字节设为“1”,但结果并没有达到我的预期。如果有人知道一个更好的方法来应用fuzzyrowfilter和range,或者已经实现了一个定制的range过滤器,我会很感激如果我能从他那里得到任何想法来获得最大的性能。
当做,
暂无答案!
目前还没有任何答案,快来回答吧!