在HBase中过滤

时间:2011-12-29 10:20:35

标签: hbase cloudera

版本:HBase Cloudera CDH3U2。

我已使用Java API将长数据类型值插入HBase。

    Get get = new Get(Bytes.toBytes("111"));

    FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);

 singleColumnValueFilter = new SingleColumnValueFilter(columnFamily,columnName , CompareOp.GREATER_OR_EQUAL, Bytes.toBytes(2));

    filterList.addFilter(singleColumnValueFilter);

    get.setFilter(filterList);
    get.setMaxVersions(10);

    Result result = hTable.get(get);

    List keyValueList = result.getColumn(columnFamily, columnName);

这里我得到keyValueList.size()为零,如果我没有应用任何过滤器,我得到keyValueList.size()是3,值是(1,5,7)。

我想要5和7的结果。

帮我这样做。

提前致谢

3 个答案:

答案 0 :(得分:0)

你如何存储价值观?你使用Bytes.toBytes(“2”)或Bytes.toBytes(2)存储它们吗?你必须在这里使用相同的东西。默认比较器为BinaryComparator,它按字典顺序比较字节转换值,但字符串和整数的转换方法不同。因此,无论是在插入时使用整数还是在比较时使用整数,或者在两种情况下都使用字符串。

请尝试使用Bytes.toBytes(“2”)。

答案 1 :(得分:0)

你说你试图存储Long值?那你不应该放Bytes.toBytes(2L)吗?

答案 2 :(得分:0)

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);

Must_Pass_All运算符是一个惰性运算,即如果它没有为filterlist中的过滤器找到任何值,它将停止执行。

尝试:

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);

此外,您只有一个过滤器集,因此不使用任何过滤器列表。仅当您希望在表格上应用多个过滤器时才使用它。