You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ch...@apache.org on 2017/05/24 09:19:01 UTC
hbase git commit: HBASE-18001 Extend the "count" shell command to
support specified conditions
Repository: hbase
Updated Branches:
refs/heads/master 998bd5f90 -> 64c701768
HBASE-18001 Extend the "count" shell command to support specified conditions
Signed-off-by: Chia-Ping Tsai <ch...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/64c70176
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/64c70176
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/64c70176
Branch: refs/heads/master
Commit: 64c701768bb451f37f65bbf3c3126d71a6cd2133
Parents: 998bd5f
Author: Guangxu Cheng <gu...@gmail.com>
Authored: Wed May 17 22:51:47 2017 +0800
Committer: Chia-Ping Tsai <ch...@gmail.com>
Committed: Wed May 24 17:06:36 2017 +0800
----------------------------------------------------------------------
hbase-shell/src/main/ruby/hbase/table.rb | 26 ++++++++++++++++----
.../src/main/ruby/shell/commands/count.rb | 9 ++++++-
hbase-shell/src/test/ruby/hbase/table_test.rb | 25 +++++++++++++++++++
3 files changed, 54 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/64c70176/hbase-shell/src/main/ruby/hbase/table.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/hbase/table.rb b/hbase-shell/src/main/ruby/hbase/table.rb
index 3185939..0dda27a 100644
--- a/hbase-shell/src/main/ruby/hbase/table.rb
+++ b/hbase-shell/src/main/ruby/hbase/table.rb
@@ -297,12 +297,28 @@ EOF
#----------------------------------------------------------------------------------------------
# Count rows in a table
- def _count_internal(interval = 1000, caching_rows = 10)
+ def _count_internal(interval = 1000, scan = nil)
+
+ raise(ArgumentError, "Scan argument should be org.apache.hadoop.hbase.client.Scan") \
+ unless scan == nil || scan.kind_of?(org.apache.hadoop.hbase.client.Scan)
# We can safely set scanner caching with the first key only filter
- scan = org.apache.hadoop.hbase.client.Scan.new
- scan.setCacheBlocks(false)
- scan.setCaching(caching_rows)
- scan.setFilter(org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter.new)
+
+ if scan == nil
+ scan = org.apache.hadoop.hbase.client.Scan.new
+ scan.setCacheBlocks(false)
+ scan.setCaching(10)
+ scan.setFilter(org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter.new)
+ else
+ scan.setCacheBlocks(false)
+ filter = scan.getFilter()
+ firstKeyOnlyFilter = org.apache.hadoop.hbase.filter.FirstKeyOnlyFilter.new
+ if filter == nil
+ scan.setFilter(firstKeyOnlyFilter)
+ else
+ firstKeyOnlyFilter.setReversed(filter.isReversed())
+ scan.setFilter(org.apache.hadoop.hbase.filter.FilterList.new(filter, firstKeyOnlyFilter))
+ end
+ end
# Run the scanner
scanner = @table.getScanner(scan)
http://git-wip-us.apache.org/repos/asf/hbase/blob/64c70176/hbase-shell/src/main/ruby/shell/commands/count.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell/commands/count.rb b/hbase-shell/src/main/ruby/shell/commands/count.rb
index 36250a6..2f2562b 100644
--- a/hbase-shell/src/main/ruby/shell/commands/count.rb
+++ b/hbase-shell/src/main/ruby/shell/commands/count.rb
@@ -35,6 +35,9 @@ parameter. Examples:
hbase> count 't1', INTERVAL => 100000
hbase> count 't1', CACHE => 1000
hbase> count 't1', INTERVAL => 10, CACHE => 1000
+ hbase> count 't1', FILTER => "
+ (QualifierFilter (>=, 'binary:xyz')) AND (TimestampsFilter ( 123, 456))"
+ hbase> count 't1', COLUMNS => ['c1', 'c2'], STARTROW => 'abc', STOPROW => 'xyz'
The same commands also can be run on a table reference. Suppose you had a reference
t to table 't1', the corresponding commands would be:
@@ -43,6 +46,9 @@ t to table 't1', the corresponding commands would be:
hbase> t.count INTERVAL => 100000
hbase> t.count CACHE => 1000
hbase> t.count INTERVAL => 10, CACHE => 1000
+ hbase> t.count FILTER => "
+ (QualifierFilter (>=, 'binary:xyz')) AND (TimestampsFilter ( 123, 456))"
+ hbase> t.count COLUMNS => ['c1', 'c2'], STARTROW => 'abc', STOPROW => 'xyz'
EOF
end
@@ -60,10 +66,11 @@ EOF
'CACHE' => 10
}.merge(params)
+ scan = table._hash_to_scan(params)
# Call the counter method
@start_time = Time.now
formatter.header
- count = table._count_internal(params['INTERVAL'].to_i, params['CACHE'].to_i) do |cnt, row|
+ count = table._count_internal(params['INTERVAL'].to_i, scan) do |cnt, row|
formatter.row([ "Current count: #{cnt}, row: #{row}" ])
end
formatter.footer(count)
http://git-wip-us.apache.org/repos/asf/hbase/blob/64c70176/hbase-shell/src/test/ruby/hbase/table_test.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/hbase/table_test.rb b/hbase-shell/src/test/ruby/hbase/table_test.rb
index 90ed7fc..a01514c 100644
--- a/hbase-shell/src/test/ruby/hbase/table_test.rb
+++ b/hbase-shell/src/test/ruby/hbase/table_test.rb
@@ -250,6 +250,31 @@ module Hbase
assert(!rows.empty?)
end
+ define_test "count should support STARTROW parameter" do
+ count = @test_table.count STARTROW => '4'
+ assert(count == 0)
+ end
+
+ define_test "count should support STOPROW parameter" do
+ count = @test_table.count STOPROW => '0'
+ assert(count == 0)
+ end
+
+ define_test "count should support COLUMNS parameter" do
+ @test_table.put(4, "x:c", "31")
+ begin
+ count = @test_table.count COLUMNS => [ 'x:c']
+ assert(count == 1)
+ ensure
+ @test_table.delete(4, "x:c")
+ end
+ end
+
+ define_test "count should support FILTER parameter" do
+ count = @test_table.count FILTER => "ValueFilter(=, 'binary:11')"
+ assert(count == 1)
+ end
+
#-------------------------------------------------------------------------------
define_test "get should work w/o columns specification" do