HBase单元格标记在扫描中返回,但在Get中未返回
我正在通过HBase客户端读取HBase手机标签 我通过Put.addImmutable(cf、col、version、value、tags)写入标记 我可以通过扫描HBase来验证这些标记是否正确写入:HBase单元格标记在扫描中返回,但在Get中未返回,hbase,Hbase,我正在通过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
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) {
}
});
我总是得到我在put上设置的正确值
但是,当我为我知道存在的行键执行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查询返回标记?发生这种情况是因为HBase单元标记不供客户端使用。当请求用户是超级用户时,它们将返回给客户端。不建议依赖于客户端读取单元格标记。这仅在使用HBasetsLanguage功能时发生。HBase的实际实例不会出现这种情况。作为超级用户,我如何请求?