2014-09-03 3 views
3

Je recherche une commande shell HBase qui comptera le nombre d'enregistrements dans une famille de colonnes spécifiée. Je sais que je peux courir:Nombre d'enregistrements dans une famille de colonnes dans une table HBase

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

mais ce sera beaucoup plus lent que la commande de comptage standard:

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

et pire encore - il ne retourne pas le nombre réel d'enregistrements, mais quelque chose comme le nombre total de cellules (si je ne me trompe pas?) dans la famille de colonnes spécifiée. je besoin de quelque chose du genre:

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

Merci à l'avance,
Michael

Répondre

3

Voici le code Ruby je l'ai écrit quand nécessaire chose que vous avez besoin. Des commentaires appropriés sont fournis. Il vous fournit la commande HBase shell count_table. Le premier paramètre est le nom de la table et le second est le tableau des propriétés, identique à la commande shell scan.

réponse directe à votre question est

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

Je recommande également d'ajouter le cache, comme pour la numérisation:

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

Et là, vous allez avec des sources:

# 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

pensez-vous savoir comment ajouter cette fonction dans HBase? –

+1

C'est juste un script client, pas quelque chose dont vous avez besoin dans les serveurs HBase. Vous ne devriez pas ajouter de telles choses car tous les composants sont déjà dans HBase. –

Questions connexes