HBASE-13100 Shell command to retrieve table splits
This commit is contained in:
parent
fdb48a7bbe
commit
c80d64c3fe
|
@ -678,5 +678,16 @@ EOF
|
||||||
column[1] = parts[0]
|
column[1] = parts[0]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------------------------
|
||||||
|
# Get the split points for the table
|
||||||
|
def _get_splits_internal()
|
||||||
|
locator = @table.getRegionLocator()
|
||||||
|
splits = locator.getAllRegionLocations().
|
||||||
|
map{|i| Bytes.toStringBinary(i.getRegionInfo().getStartKey)}.delete_if{|k| k == ""}
|
||||||
|
locator.close()
|
||||||
|
puts("Total number of splits = %s" % [splits.size + 1])
|
||||||
|
return splits
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -301,6 +301,7 @@ Shell.load_command_group(
|
||||||
truncate
|
truncate
|
||||||
truncate_preserve
|
truncate_preserve
|
||||||
append
|
append
|
||||||
|
get_splits
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#
|
||||||
|
# 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 GetSplits < Command
|
||||||
|
def help
|
||||||
|
return <<-EOF
|
||||||
|
Get the splits of the named table:
|
||||||
|
hbase> get_splits 't1'
|
||||||
|
hbase> get_splits 'ns1:t1'
|
||||||
|
|
||||||
|
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.get_splits
|
||||||
|
EOF
|
||||||
|
end
|
||||||
|
|
||||||
|
def command(table)
|
||||||
|
get_splits(table(table))
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_splits(table)
|
||||||
|
table._get_splits_internal()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
::Hbase::Table.add_shell_command("get_splits")
|
|
@ -611,5 +611,22 @@ module Hbase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
define_test "Split count for a table" do
|
||||||
|
@testTableName = "tableWithSplits"
|
||||||
|
create_test_table_with_splits(@testTableName, SPLITS => ['10', '20', '30', '40'])
|
||||||
|
@table = table(@testTableName)
|
||||||
|
splits = @table._get_splits_internal()
|
||||||
|
#Total splits is 5 but here count is 4 as we ignore implicit empty split.
|
||||||
|
assert_equal(4, splits.size)
|
||||||
|
assert_equal(["10", "20", "30", "40"], splits)
|
||||||
|
drop_test_table(@testTableName)
|
||||||
|
end
|
||||||
|
|
||||||
|
define_test "Split count for a empty table" do
|
||||||
|
splits = @test_table._get_splits_internal()
|
||||||
|
#Empty split should not be part of this array.
|
||||||
|
assert_equal(0, splits.size)
|
||||||
|
assert_equal([], splits)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -85,6 +85,18 @@ module Hbase
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def create_test_table_with_splits(name, splits)
|
||||||
|
# Create the table if needed
|
||||||
|
unless admin.exists?(name)
|
||||||
|
admin.create name, 'f1', splits
|
||||||
|
end
|
||||||
|
|
||||||
|
# Enable the table if needed
|
||||||
|
unless admin.enabled?(name)
|
||||||
|
admin.enable(name)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def drop_test_table(name)
|
def drop_test_table(name)
|
||||||
return unless admin.exists?(name)
|
return unless admin.exists?(name)
|
||||||
begin
|
begin
|
||||||
|
|
Loading…
Reference in New Issue