我正在使用HBase的Java客户端。
我的cb.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal)->{
if(newVal != null && !newVal.equals("Two")){
Platform.runLater(() -> cb.setValue(oldVal));
}
});
以rowkeys
形式提供。
我有一个名为timestamp-userid
的列,其值为browser
,chrome
等。
我需要扫描浏览器使用的最后IE
分钟内发生的所有行是Internet Explorer。
我在下面添加了2个过滤器。一个检查7000
(timestamp
的前缀)是否在某个范围内(最后rowkey
分钟),另一个检查7000
列值是否等于browser
。
这是我的代码:
IE
问题是即使我为public static int currentUsersColumn(Table tb, String colname, String colval) throws IOException{
ArrayList<String> arl = new ArrayList<String>();
long curtime = System.currentTimeMillis();
long sevenminsago = curtime - (1000*60*7000);
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
List<MultiRowRangeFilter.RowRange> lst = new ArrayList<MultiRowRangeFilter.RowRange>();
lst.add(new MultiRowRangeFilter.RowRange(Long.toString(sevenminsago)+"-0", true, Long.toString(curtime)+"-z", true));
filterList.addFilter(new MultiRowRangeFilter(lst));
filterList.addFilter(new SingleColumnValueFilter(ColFam, Bytes.toBytes(colname), CompareOp.EQUAL, Bytes.toBytes(colval)));
Scan s = new Scan();
s.setFilter(filterList);
ResultScanner scanner = tb.getScanner(s);
for(Result rr = scanner.next(); rr!=null; rr = scanner.next()){
arl.add(Bytes.toString(rr.getRow()));
}
return arl.size();
}
输入一个随机字符串,我仍然会得到colval
大小ArrayList
。这显然是不正确的。
我猜我的400
不正确,因为RowRangeFilter
似乎非常简单。
有什么想法吗?
答案 0 :(得分:0)
你检查了你出来的价值吗?它们符合您的查询吗?如果没有能够看到您的数据我最好的猜测是您有一些没有browser
列的行,并且因为您没有在setFilterIfMissing(true)
上设置SingleColumnValueFilter
它包括那些行。请参阅the docs for the filter class。