HBASE过滤多个值

时间:2016-12-29 00:49:44

标签: java hbase

我在使用过滤器搜索hbase中的数据时遇到问题。

首先,我从一个表中读取一些数据并存储在vector或arrayList中:

    for (Result r : rs) {
        for (KeyValue kv : r.raw()) {
            if (new String(kv.getFamily()).equals("mpnum")) {
                temp = new String(kv.getValue());
                x.addElement(temp);

            }
        }
    }

然后,我想根据此向量的值搜索不同的表。我使用过滤器执行此操作:(我也尝试了BinaryPrefixComparatorBinaryComparator

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


    for (int c = 0; c < x.size(); c++) {
       System.out.println(x.get(c).toString());          
       filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes("mpnum"), null, CompareOp.EQUAL, new SubstringComparator( x.get(c).toString()  )));

    }

我应该得到3个结果,但是我只得到一个结果,这是数据库中的第一个条目。 没有意义的是,当我将我正在寻找的值硬编码到我的代码中时,我将得到所有3个结果。

我认为将字节转换为String然后再转换为字节可能存在一些问题,但这并不能解释它是如何将第一个结果带回来的。出于某种原因,它在第一场比赛时停止,并且不会继续查找包含匹配数据的其他2行。如果我硬编码,我会得到结果:

x.addElement("abc123");
filterList.addFilter(new SingleColumnValueFilter(Bytes.toBytes("mpnum"), null, CompareOp.EQUAL, new SubstringComparator( x.get(0).toString()  )));

有谁知道问题是什么或我需要做些什么来解决我的问题?非常感谢您的帮助。

谢谢

编辑:这是表格的内容:

TABLE1: ROW COLUMN + CELL
 0列= gpnum:,时间戳= 1481300288449,值= def123
 0列= mpnum:,时间戳= 1481300273355,值= abc123
 0列=价格:,时间戳= 1481300255337,值= 85.0
 1列= gpnum :,时间戳= 1481301599999,值= def2244
 1列= mpnum:,时间戳= 1481301582336,值= 011511607
 1列=价格:,时间戳= 1481301673886,值= 0.76

TABLE2

ROW COLUMN + CELL
 0列=品牌:,时间戳= 1481300227283,值= x
 0列= mpnum:,时间戳= 1481300212289,值= abc123
 0列=价格:,时间戳= 1481300110950,值= 50.0
 1列= mpnum:,时间戳= 1481301806687,值= 011511607
 1列=价格:,时间戳= 1481301777345,值= 1.81
 13列= webtype :,时间戳= 1483507543878,值= US
 3列= avail:,timestamp = 1481306538360,value = avail
 3栏=品牌:,时间戳= 1481306538360,价值=品牌
 3列= descr:,时间戳= 1481306538360,值=描述
 3列= dist:,时间戳= 1481306538360,值=分配器
 3列= mpnum:,时间戳= 1481306538360,值= pnum
 3列=价格:,时间戳= 1481306538360,价值=价格
 3列= url:,时间戳= 1481306538360,值= url
 3列= webtype:,timestamp = 1481306538360,value = webtype
 4列= avail :,时间戳= 1481306538374,值= 4
 4列=品牌:,时间戳= 1481306538374,值= x
 4列= descr:,时间戳= 1481306538374,值=描述
 4列= dist:,时间戳= 1481306538374,值= x
 4列= mpnum:,时间戳= 1482117383212,值= 011511607
 4列=价格:,时间戳= 1481306538374,值= 34.51
 4列= url:,时间戳= 1481306538374,值= x
 4列= webtype:,timestamp = 1481306538374,value = US
 5列= avail:,timestamp = 1481306538378,value =
 5列=品牌:,时间戳= 1481306538378,值=名称
 5列= descr:,时间戳= 1481306538378,值= x
 5列= dist:,时间戳= 1481306538378,值= x
 5列= mpnum:,时间戳= 1482117392043,值= 011511607
 5列=价格:,时间戳= 1481306538378,值= 321.412
 5列=网址:,时间戳= 1481306538378,值= x.com

THIRD TABLE(存储结果匹配)

0 column = brand:,timestamp = 1481301813849,value = name
 0列= cprice :,时间戳= 1481301813849,值= 1.81
 0列= gpnum:,时间戳= 1481301813849,值= def2244
 0列= gprice :,时间戳= 1481301813849,值= 0.76
 0列= mpnum:,时间戳= 1481301813849,值= 011511607

**应该是上面以粗体显示的三个匹配,但只返回一个匹配

如果有人愿意为您付费,请发送电子邮件至tt224416@gmail.com

0 个答案:

没有答案