gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:40:27 26 4
gpt4 key购买 nike

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

我的 rowkeystimestamp-userid 的形式给出。

我有一个名为 browser 的列,其值为 chromeIE 等。

我需要扫描过去 7000 分钟内发生的所有行,其中使用的浏览器是 Internet Explorer。

我在下面添加了 2 个过滤器。一个用于检查 timestamp(rowkey 的前缀)是否在特定范围内(最后 7000 分钟),另一个用于检查 code>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 输入一个随机字符串,我仍然得到一个大小为 400ArrayList。这显然是不正确的。

我猜我的 RowRangeFilter 不知何故不正确,因为 ColumnFilter 看起来非常简单。

有什么想法吗?

最佳答案

你检查过你得出的值了吗?它们符合您的查询吗?在无法看到您的数据的情况下,我最好的猜测是您有一些行没有 browser 列,并且因为您没有设置 setFilterIfMissing(true) SingleColumnValueFilter 它包括那些行。参见 the docs for the filter class .

关于java - Hbase 多个过滤器无法正常运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37939278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com