hbase cell tags在scan中返回,但在get中未返回

4ioopgfo  于 2021-06-10  发布在  Hbase
关注(0)|答案(1)|浏览(344)

我正在通过hbase客户端读取hbase手机标签。
我通过put.addimmutable(cf,col,version,value,tags)编写标记。
我可以通过扫描hbase来验证这些标记是否已正确写入:

Scan s = new Scan();
    s.setFilter(new PageFilter(100));
    ResultScanner scanner = table.getScanner(s);
    Result[] results = scanner.next(100);
    Arrays.stream(results).forEach(r ->  {
        CellScanner cs = r.cellScanner();
        try {
            while(cs.advance()) {
                byte tagValue = ((KeyValue)cs.current()).getTags()
                        .stream()
                        .filter(tag -> tag.getType() == MY_SPECIAL_TAG_TYPE)
                        .findFirst().orElseThrow(() -> new RuntimeException("No tag found"))
                        .getValue();
                System.out.println("tagValue=" + Bytes.toString(tagValue));
            }
        } catch(IOException e) {
        }
    });

我总是得到正确的值,我已经设置了对投入。
但是,当我对一个我知道存在的行键执行get操作(见下面的代码)并尝试访问标记时,没有返回任何值。

Get g = new Get(Bytes.toBytes("myKey");

    Result r = table.get(g);

    CellScanner cs = r.cellScanner();
        try {
            while(cs.advance()) {
                byte tagValue = ((KeyValue)cs.current()).getTags()
                        .stream()
                        //.filter(tag -> tag.getType() == MY_SPECIAL_TAG_TYPE)
                        .findFirst().orElseThrow(() -> new RuntimeException("No tag found"))
                        .getValue();
                System.out.println("tagValue=" + Bytes.toString(tagValue));
            }
        } catch(IOException e) {
        }
    }

我是否犯了一个错误,或者这是hbase客户端api的一个限制,即get查询不应返回标记?

vd8tlhqk

vd8tlhqk1#

发生这种情况是因为hbase单元标记不供客户端使用。当请求用户是超级用户时,它们将返回给客户端。不建议依赖于在客户端读取单元标记。

相关问题