2014-09-03 44 views
3

我正在查找一個HBase shell命令,該命令將計算指定列族中的記錄數。 我知道我可以運行:計算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

這裏是Ruby代碼所需要的東西的時候像你需要我寫的。提供適當的評論。它爲您提供HBase shell count_table命令。第一個參數是表名,第二個參數是屬性數組,與scan shell命令相同。

直接回答你的問題是

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

我還建議增加緩存,像掃描:

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

你知道如何在HBase中添加這個函數? – 2016-11-24 13:11:54

+1

這只是客戶端腳本,並不是您在HBase服務器內部需要的東西。你不應該添加這樣的東西,因爲它的所有組件都已經在HBase中。 – 2016-11-24 13:56:14