2011-10-10 2 views
2
에서 가족에 의해 값을 취득

행 : 우리가 각 행에 대해 FamilyMap를 얻을 다음 행에 의해 테이블 ​​행을 스캔 할 수있는 자바 HBase와의 API에서HBase를

Key, Family:Qualifier, Value 
Key, Family1:Qualifier, Value 
Key, Family2:Qualifier, Value 
Key, FamilyN:Qualifier, Value 

.

qualifier을 모른 채 특정 family에 대한 모든 행을 가져 오는 옵션이 있습니까?

예인 경우 키로 가치를 얻거나 가족별로 가치를 얻는 것 사이에 실적 기간이 다른가요?

답변

1

이와 같은 특정 제품군에서 스캐너를 사용할 수 있습니다. 특정 열 패밀리에서 스캐너를 가져 오면 해당 결과의 일부로 해당 패밀리 데이터 만 반환됩니다. 이것이 의미하는 것은 해당 패밀리의 일부인 한정자와 값을 결과의 일부로 사용할 수 있다는 것입니다.

HTable table = new HTable(HBaseConfiguration.create(), "tablename"); 
Scan scan = new scan(); 
scan.setCaching(NUMBER_OF_ROWS_TO_CACHE); 
//If you want to get data for all families then do not add any family. 
scan.addFamily(Bytes.toBytes("columnFamilyName")); 
ResultScanner scanner = table.getScanner(scan); 

당신은 당신이 모든 열 가족의 데이터를 얻을 위에서 만든 scan 객체에있는 가족을 추가하지 않으면. 특정 행에 대한 모든 열 가족에 대한 모든 데이터를 가져올이기 때문에 비교적 느린 모든 행 데이터를 얻을 때 지금 당신은 성능에 관해서는이

for (Result result = scanner.next(); (result != null); result = scanner.next()) { 
    //If you want a family specific data 
    NavigableMap familyMap = result.getFamilyMap(Bytes.toBytes("familyname")); 
    //if you want to get the entire row 
    Get get = new Get(result.getRow()); 
    Result entireRow = table.get(get); 

} 

처럼 반복하여 테이블을 스캔 할 수 있습니다. 그래서, 당신이 원하지 않는 한 모든 가족은 전체 행을 얻지 못합니다.

+1

이상한 ... 당신은 table.get (get)을합니다. 결과 결과 = scanner.next() 그리고 우리가 패밀리에 의해 키없이 행을 얻을 수 없다는 것을 의미합니까? – JohnJohnGa

+0

@ JohnJohnGa'table.get (get)'은 모든 열 패밀리의 데이터를 포함하는 전체 행을 가져옵니다. 대답을 더 명확하게하기 위해 편집 해 드리겠습니다 .. –

+0

예, 맞습니다. 가족별로 특정 행을 가져올 수 없습니다. 특정 행을 얻으려면'table.get (get)'이하는'rowkey'를 사용하여 행을 가져와야합니다. –

관련 문제