hbase多个筛选器无法正常工作

3mpgtkmj  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(354)

我使用的是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 看起来很直截了当。
有什么想法吗?

kokeuurv

kokeuurv1#

你检查过你得出的数值了吗?他们符合你的要求吗?在看不到数据的情况下,我最好的猜测是,有些行没有 browser 列,因为你没有设置 setFilterIfMissing(true)SingleColumnValueFilter 包括那些排。请参阅文档中的filter类。

相关问题