我使用的是hbase的java客户机。
我的 rowkeys
在表格中给出 timestamp-userid
.
我有一个专栏叫 browser
有价值观 chrome
, IE
等等。
我需要扫描上一次发生的所有行 7000
使用internet explorer浏览器的分钟数。
我在下面添加了2个过滤器。一个用来检查 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
是不正确的,因为 ColumnFilter
看起来很直截了当。
有什么想法吗?
1条答案
按热度按时间kokeuurv1#
你检查过你得出的数值了吗?他们符合你的要求吗?在看不到数据的情况下,我最好的猜测是,有些行没有
browser
列,因为你没有设置setFilterIfMissing(true)
上SingleColumnValueFilter
包括那些排。请参阅文档中的filter类。