You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by sy...@apache.org on 2016/09/19 23:17:44 UTC
[31/50] [abbrv] hbase git commit: HBASE-16381 Shell deleteall command
should support row key prefixes (Yi Liang)
HBASE-16381 Shell deleteall command should support row key prefixes (Yi Liang)
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/1d6c90b4
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/1d6c90b4
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/1d6c90b4
Branch: refs/heads/hbase-12439
Commit: 1d6c90b4969b8ec47699c69984be052050a9ee46
Parents: 8ef6c76
Author: chenheng <ch...@apache.org>
Authored: Thu Sep 15 19:18:47 2016 +0800
Committer: chenheng <ch...@apache.org>
Committed: Thu Sep 15 19:20:29 2016 +0800
----------------------------------------------------------------------
hbase-shell/src/main/ruby/hbase/table.rb | 81 +++++++++++++++-----
.../src/main/ruby/shell/commands/deleteall.rb | 17 +++-
hbase-shell/src/test/ruby/hbase/table_test.rb | 12 +++
3 files changed, 86 insertions(+), 24 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/1d6c90b4/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 5930c0d..22bbcfe 100644
--- a/hbase-shell/src/main/ruby/hbase/table.rb
+++ b/hbase-shell/src/main/ruby/hbase/table.rb
@@ -160,6 +160,62 @@ EOF
end
#----------------------------------------------------------------------------------------------
+ # Create a Delete mutation
+ def _createdelete_internal(row, column = nil,
+ timestamp = org.apache.hadoop.hbase.HConstants::LATEST_TIMESTAMP, args = {})
+ temptimestamp = timestamp
+ if temptimestamp.kind_of?(Hash)
+ timestamp = org.apache.hadoop.hbase.HConstants::LATEST_TIMESTAMP
+ end
+ d = org.apache.hadoop.hbase.client.Delete.new(row.to_s.to_java_bytes, timestamp)
+ if temptimestamp.kind_of?(Hash)
+ temptimestamp.each do |k, v|
+ if v.kind_of?(String)
+ set_cell_visibility(d, v) if v
+ end
+ end
+ end
+ if args.any?
+ visibility = args[VISIBILITY]
+ set_cell_visibility(d, visibility) if visibility
+ end
+ if column
+ family, qualifier = parse_column_name(column)
+ d.addColumns(family, qualifier, timestamp)
+ end
+ return d
+ end
+
+ #----------------------------------------------------------------------------------------------
+ # Delete rows using prefix
+ def _deleterows_internal(row, column = nil,
+ timestamp = org.apache.hadoop.hbase.HConstants::LATEST_TIMESTAMP, args={})
+ cache = row["CACHE"] ? row["CACHE"] : 100
+ prefix = row["ROWPREFIXFILTER"]
+
+ # create scan to get table names using prefix
+ scan = org.apache.hadoop.hbase.client.Scan.new
+ scan.setRowPrefixFilter(prefix.to_java_bytes)
+ # Run the scanner to get all rowkeys
+ scanner = @table.getScanner(scan)
+ # Create a list to store all deletes
+ list = java.util.ArrayList.new
+ # Iterate results
+ iter = scanner.iterator
+ while iter.hasNext
+ row = iter.next
+ key = org.apache.hadoop.hbase.util.Bytes::toStringBinary(row.getRow)
+ d = _createdelete_internal(key, column, timestamp, args)
+ list.add(d)
+ if list.size >= cache
+ @table.delete(list)
+ list.clear
+ end
+ end
+ @table.delete(list)
+ end
+
+ #----------------------------------------------------------------------------------------------
# Delete a cell
def _delete_internal(row, column,
timestamp = org.apache.hadoop.hbase.HConstants::LATEST_TIMESTAMP, args = {})
@@ -175,27 +231,12 @@ EOF
if is_meta_table?
raise ArgumentError, "Row Not Found" if _get_internal(row).nil?
end
- temptimestamp = timestamp
- if temptimestamp.kind_of?(Hash)
- timestamp = org.apache.hadoop.hbase.HConstants::LATEST_TIMESTAMP
- end
- d = org.apache.hadoop.hbase.client.Delete.new(row.to_s.to_java_bytes, timestamp)
- if temptimestamp.kind_of?(Hash)
- temptimestamp.each do |k, v|
- if v.kind_of?(String)
- set_cell_visibility(d, v) if v
- end
- end
- end
- if args.any?
- visibility = args[VISIBILITY]
- set_cell_visibility(d, visibility) if visibility
- end
- if column
- family, qualifier = parse_column_name(column)
- d.addColumns(family, qualifier, timestamp)
+ if row.kind_of?(Hash)
+ _deleterows_internal(row, column, timestamp, args)
+ else
+ d = _createdelete_internal(row, column, timestamp, args)
+ @table.delete(d)
end
- @table.delete(d)
end
#----------------------------------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/1d6c90b4/hbase-shell/src/main/ruby/shell/commands/deleteall.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell/commands/deleteall.rb b/hbase-shell/src/main/ruby/shell/commands/deleteall.rb
index 2965403..033ec67 100644
--- a/hbase-shell/src/main/ruby/shell/commands/deleteall.rb
+++ b/hbase-shell/src/main/ruby/shell/commands/deleteall.rb
@@ -23,7 +23,8 @@ module Shell
def help
return <<-EOF
Delete all cells in a given row; pass a table name, row, and optionally
-a column and timestamp. Examples:
+a column and timestamp. Deleteall also support deleting a row range using a
+row key prefix. Examples:
hbase> deleteall 'ns1:t1', 'r1'
hbase> deleteall 't1', 'r1'
@@ -31,13 +32,21 @@ a column and timestamp. Examples:
hbase> deleteall 't1', 'r1', 'c1', ts1
hbase> deleteall 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
+ROWPREFIXFILTER can be used to delete row ranges
+ hbase> deleteall 't1', {ROWPREFIXFILTER => 'prefix'}
+ hbase> deleteall 't1', {ROWPREFIXFILTER => 'prefix'}, 'c1' //delete certain column family in the row ranges
+ hbase> deleteall 't1', {ROWPREFIXFILTER => 'prefix'}, 'c1', ts1
+ hbase> deleteall 't1', {ROWPREFIXFILTER => 'prefix'}, 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
+
+CACHE can be used to specify how many deletes batched to be sent to server at one time, default is 100
+ hbase> deleteall 't1', {ROWPREFIXFILTER => 'prefix', CACHE => 100}
+
+
The same commands also can be run on a table reference. Suppose you had a reference
t to table 't1', the corresponding command would be:
- hbase> t.deleteall 'r1'
- hbase> t.deleteall 'r1', 'c1'
- hbase> t.deleteall 'r1', 'c1', ts1
hbase> t.deleteall 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
+ hbase> t.deleteall {ROWPREFIXFILTER => 'prefix', CACHE => 100}, 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}
EOF
end
http://git-wip-us.apache.org/repos/asf/hbase/blob/1d6c90b4/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 faf9827..53d0ca9 100644
--- a/hbase-shell/src/test/ruby/hbase/table_test.rb
+++ b/hbase-shell/src/test/ruby/hbase/table_test.rb
@@ -120,6 +120,10 @@ module Hbase
@test_table.put(105, "x:a", "3")
@test_table.put(105, "x:a", "4")
+
+ @test_table.put("111", "x:a", "5")
+ @test_table.put("111", "x:b", "6")
+ @test_table.put("112", "x:a", "5")
end
def teardown
@@ -181,6 +185,14 @@ module Hbase
assert_nil(res)
end
+ define_test "deletall should work with row prefix" do
+ @test_table.deleteall({ROWPREFIXFILTER => '11'})
+ res1 = @test_table._get_internal('111')
+ assert_nil(res1)
+ res2 = @test_table._get_internal('112')
+ assert_nil(res2)
+ end
+
define_test "append should work with value" do
@test_table.append("123", 'x:cnt2', '123')
end