2016-08-22 59 views
0

我正在通過HBase客戶端閱讀HBase Cell標籤。HBase Cell標籤在Scan中返回,但不在獲取

我通過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 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的限制,不能從獲取查詢返回標記嗎?

+0

只有在使用HBaseTestingUtility時纔會發生這種情況。這對於HBase的實際實例不會發生。 – richardstartin

回答

1

發生這種情況是因爲HBase Cell標籤不適合客戶端使用。當請求用戶是超級用戶時,它們將被返回給客戶端。不建議依靠讀取單元格標籤客戶端。