Index: hbase-server/src/main/ruby/hbase/admin.rb =================================================================== --- hbase-server/src/main/ruby/hbase/admin.rb (revision 1460939) +++ hbase-server/src/main/ruby/hbase/admin.rb (working copy) @@ -20,6 +20,7 @@ include Java java_import org.apache.hadoop.hbase.util.Pair java_import org.apache.hadoop.hbase.util.RegionSplitter +java_import org.apache.hadoop.hbase.util.Bytes # Wrapper for org.apache.hadoop.hbase.client.HBaseAdmin @@ -344,6 +345,24 @@ @admin.createTable(table_description) end + #---------------------------------------------------------------------------------------------- + # Truncates table while maintaing region boundaries (deletes all records by recreating the table) + def truncate_preserve(table_name, conf = @conf) + h_table = org.apache.hadoop.hbase.client.HTable.new(conf, table_name) + splits = h_table.getRegionsInfo().keys().map{|i| Bytes.toString(i.getStartKey)}.delete_if{|k| k == ""}.to_java :String + splits = org.apache.hadoop.hbase.util.Bytes.toByteArrays(splits) + table_description = h_table.getTableDescriptor() + yield 'Disabling table...' if block_given? + disable(table_name) + + yield 'Dropping table...' if block_given? + drop(table_name) + + yield 'Creating table with region boundaries...' if block_given? + @admin.createTable(table_description, splits) + end + + #---------------------------------------------------------------------------------------------- # Check the status of alter command (number of regions reopened) def alter_status(table_name) # Table name should be a string Index: hbase-server/src/main/ruby/shell/commands/truncate_preserve.rb =================================================================== --- hbase-server/src/main/ruby/shell/commands/truncate_preserve.rb (revision 0) +++ hbase-server/src/main/ruby/shell/commands/truncate_preserve.rb (revision 0) @@ -0,0 +1,38 @@ +# +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +module Shell + module Commands + class TruncatePreserve < Command + def help + return <<-EOF + Disables, drops and recreates the specified table while still maintaing the previous region boundaries. +EOF + end + + def command(table) + format_simple_command do + puts "Truncating '#{table}' table (it may take a while):" + admin.truncate_preserve(table) { |log| puts " - #{log}" } + end + end + + end + end +end Index: hbase-server/src/main/ruby/shell.rb =================================================================== --- hbase-server/src/main/ruby/shell.rb (revision 1460939) +++ hbase-server/src/main/ruby/shell.rb (working copy) @@ -266,6 +266,7 @@ put scan truncate + truncate_preserve ] )