Hbase多个过滤器无法正常运行

时间:2016-06-21 08:30:49

标签: java hadoop filter hbase

我正在使用HBase的Java客户端。

我的cb.getSelectionModel().selectedItemProperty().addListener((obs, oldVal, newVal)->{ if(newVal != null && !newVal.equals("Two")){ Platform.runLater(() -> cb.setValue(oldVal)); } }); rowkeys形式提供。

我有一个名为timestamp-userid的列,其值为browserchrome等。

我需要扫描浏览器使用的最后IE分钟内发生的所有行是Internet Explorer。

我在下面添加了2个过滤器。一个检查7000timestamp的前缀)是否在某个范围内(最后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似乎非常简单。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

你检查了你出来的价值吗?它们符合您的查询吗?如果没有能够看到您的数据我最好的猜测是您有一些没有browser列的行,并且因为您没有在setFilterIfMissing(true)上设置SingleColumnValueFilter它包括那些行。请参阅the docs for the filter class