HBASE-813 Add a row counter in the new shell

git-svn-id: https://svn.apache.org/repos/asf/hadoop/hbase/trunk@685257 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Michael Stack 2008-08-12 18:30:33 +00:00
parent c41834a778
commit 802571af28
4 changed files with 38 additions and 2 deletions

View File

@ -15,6 +15,7 @@ Release 0.3.0 - Unreleased
HBASE-820 Need mainline to flush when 'Blocking updates' goes up.
(Jean-Daniel Cryans via Stack)
HBASE-821 UnknownScanner happens too often (Jean-Daniel Cryans via Stack)
HBASE-813 Add a row counter in the new shell (Jean-Daniel Cryans via Stack)
IMPROVEMENTS

View File

@ -97,12 +97,15 @@ module Formatter
@out.printf(spec, str)
end
def footer(startTime = nil)
def footer(startTime = nil, rowCount = nil)
if not rowCount
rowCount = @rowCount
end
if not startTime
return
end
# Only output elapsed time and row count if startTime passed
@out.puts("%d row(s) in %.4f seconds" % [@rowCount, Time.now - startTime])
@out.puts("%d row(s) in %.4f seconds" % [rowCount, Time.now - startTime])
end
end

View File

@ -346,6 +346,26 @@ module HBase
end
@formatter.footer(now)
end
def count(interval = 1000)
now = Time.now
columns = getAllColumns()
cs = columns.to_java(java.lang.String)
s = @table.getScanner(cs)
count = 0
i = s.iterator()
@formatter.header("Count may take a long time to complete!")
while i.hasNext()
r = i.next()
count += 1
if count % interval == 0
@formatter.row(["Current count: " + count.to_s + ", row: " + \
(String.from_java_bytes r.getRow())])
end
end
@formatter.footer(now, count)
end
end
# Testing. To run this test, there needs to be an hbase cluster up and

View File

@ -114,6 +114,14 @@ HBASE SHELL COMMANDS:
hbase> alter 't1', {NAME => 'f1', VERSIONS => 5}
count Count the number of rows in a table. This operation may take a LONG
time (Run '$HADOOP_HOME/bin/hadoop jar hbase.jar rowcount' to run a
counting mapreduce job). Current count is shown every 1000 rows by
default. Count interval may be optionally specified. Examples:
hbase> count 't1'
hbase> count 't1', 100000
create Create table; pass table name, a dictionary of specifications per
column family, and optionally a dictionary of table configuration.
Dictionaries are described below in the GENERAL NOTES section.
@ -273,6 +281,10 @@ def deleteall(table, row, column = nil,
table(table).deleteall(row, column, timestamp)
end
def count(table, interval = 1000)
table(table).count(interval)
end
# Output a banner message that tells users where to go for help
puts <<HERE
HBase Shell; enter 'help<RETURN>' for list of supported commands.