2014-09-03 2 views
3

지정된 열 패밀리의 레코드 수를 계산할 HBase 쉘 명령을 찾고 있습니다.HBase 테이블의 열 패밀리에있는 레코드 수를 카운트합니다.

echo "scan 'table_name'" | hbase shell | grep column_family_name | wc -l 

그러나이 표준 계산 명령보다 훨씬 느리게 실행됩니다 : 는 내가 실행할 수 있습니다 알고

count 'table_name' , CACHE => 50000 (because the use of the CACHE=>50000) 

악화가 - 그것은 기록의 실수를 반환하지 않습니다,하지만 같은 지정된 열 패밀리의 총 셀 수 (내가 잘못 생각하지 않는다면?) 나는 종류의 뭔가가 필요합니다 사전에

count 'table_name' , CACHE => 50000 , {COLUMNS => 'column_family_name'} 

감사를
마이클

답변

3

여기 당신이 필요로 같은 일을 필요로 할 때 내가 쓴 루비 코드입니다. 적절한 코멘트가 제공됩니다. 그것은 HBasecount_table 명령을 제공합니다. 첫 번째 매개 변수는 테이블 이름이고 두 번째는 속성 배열입니다. scan 쉘 명령과 동일합니다. 여기

count_table 'your.table', { COLUMNS => 'your.family', CACHE => 10000 } 

그리고 당신이 소스와 이동 :

# Argiments are the same as for scan command. 
# Examples: 
# 
# count_table 'test.table', { COLUMNS => 'f:c1' } 
# --- Counts f:c1 columsn in 'test_table'. 
# 
# count_table 'other.table', { COLUMNS => 'f' } 
# --- Counts 'f' family rows in 'other.table'. 
# 
# count_table 'test.table', { CACHE => 1000 } 
# --- Count rows with caching. 
# 
def count_table(tablename, args = {}) 

    table = @shell.hbase_table(tablename) 

    # Run the scanner 
    scanner = table._get_scanner(args) 

    count = 0 
    iter = scanner.iterator 

    # Iterate results 
    while iter.hasNext 
     row = iter.next 
     count += 1 
    end 

    # Return the counter 
    return count 
end 
+0

당신을

귀하의 질문에 직접 대답은

count_table 'your.table', { COLUMNS => 'your.family' } 

나는 또한 스캔과 같은 캐시를 추가하는 것이 좋습니다입니다 HBase에서이 기능을 추가하는 방법을 알고 계십니까? –

+1

이것은 클라이언트 스크립트 일 뿐이며 HBase 서버 내부에 필요한 스크립트는 아닙니다. 이러한 구성 요소는 모두 HBase에 포함되어 있으므로 추가하지 마십시오. –

관련 문제