HBase テーブル管理コマンド - create, list, exists, disable/enable, describe, alter, drop
Table Management commands
ここでは、テーブル管理に関する HBase Shell コマンドを紹介する。
create - テーブル作成
create コマンドを使用してテーブルを作成できる。ここでは、テーブル名と Column Family 名を指定する必要がある。HBase shell でテーブルを作成する構文は次のとおりである。
create '<table name>', '<column family>'
次は order というテーブルのサンプルスキーマである。ここには customer と sales という 2 つの column family がある。

次のように HBase shell でこのテーブルを作成できる。
create 'order', 'customer', 'sales'
実行すると次のように表示される。
hbase(main):002:0> create 'order', 'customer', 'sales'
Created table order
Took 2.4344 seconds
=> Hbase::Table - order
create オプション
テーブルを作成するときにオプションを追加することもできる。
t1 を作成しながら、最新の version を最大 5 個まで保存する column family cf1 を作成する。
create 't1', {NAME => 'f1', VERSIONS => 5}
t1 を作成しながら、column family cf1、cf2、cf3 を作成する。
create 't1', {NAME => 'f1', NAME => 'f2', NAME => 'f3'}
その他のオプションを指定したコマンドである。
create 't1', {NAME => 'cf2', VERSION => 1, TTL => 2592000, BLOCKCACHE =>true}
create 't1', {NAME => 'cf2', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' ='10'}}
list - テーブル一覧照会
list は、HBase のすべてのテーブルを一覧表示するために使用されるコマンドである。list コマンドの構文は次のとおりである。
list
このコマンドを入力し、HBase プロンプトで実行すると、次のように HBase のすべてのテーブル一覧が表示される。
hbase(main):004:0> list
TABLE
order
1 row(s) in 0.1070 seconds
=> ["order"]
次のようにオプションを付けることもできる。
hbase(main):005:0> list 'customer.*'
TABLE
order
1 row(s) in 0.0140 seconds
=> ["order"]
exists - テーブル存在確認
exists コマンドを使用してテーブルの存在を確認できる。次はテーブルの存在を確認する構文である。
exists '<table name>'
次の例では、order テーブルが存在するかを確認している。
hbase(main):022:0> exists 'order'
Table order does exist
0 row(s) in 0.0680 seconds
次の例では、user テーブルが存在するかを確認しているが、実際には存在しない場合である。
hbase(main):023:0> exists 'user'
Table user does not exist
0 row(s) in 0.0110 seconds
disable - テーブル無効化
テーブルを削除したり設定を変更したりするには、まず disable コマンドを使用してテーブルを無効化する必要がある。enable コマンドを使用すると再び有効化できる。
テーブルを無効化する構文は次のとおりである。
disable '<table name>'
次は order テーブルを無効化する方法を示す例である。
hbase(main):004:0> disable 'order'
0 row(s) in 1.4570 seconds
テーブルを無効化した後でも、list および exists コマンドでテーブルの存在を確認できる。
hbase(main):009:0> list
TABLE
order
1 row(s) in 0.0140 seconds
=> ["order"]
無効化されたテーブルは scan できない。次のようなエラーが発生する。
hbase(main):010:0> scan 'order'
ROW COLUMN+CELL
ERROR: order is disabled.
// omitted
is_disabled
このコマンドは、テーブルが無効化されているかを確認するために使用される。構文は次のとおりである。
is_disabled '<table name>'
次の例では、order というテーブルが無効化されているかどうかを確認する。無効化されていれば true を返し、そうでなければ false を返す。
hbase(main):011:0> is_disabled 'order'
true
0 row(s) in 0.0360 seconds
disable_all
disable_all コマンドは、指定した正規表現に一致するすべてのテーブルを無効化するために使用される。disable_all コマンドの構文は次のとおりである。
disable_all ‘<regex table name>’
簡単な例を次に示す。次のコマンドは r で始まるすべてのテーブルを無効化する。
disable_all 'r.*'
HBase に dev_follow、dev_friend、dev_test、dev_user という dev で始まる 4 つのテーブルがあると仮定する。次のコードは dev で始まるすべてのテーブルを無効化する。
hbase(main):017:0> disable_all 'dev.*'
dev_follow
dev_friend
dev_test
dev_user
Disable the above 4 tables (y/n)?
y
4 tables successfully disabled
enable - テーブル有効化
無効化されたテーブルを有効化するには、enable コマンドを使用する。次はテーブルを有効化する構文である。
enable '<table name>'
次はテーブルを有効化する例である。
hbase(main):018:0> enable 'order'
0 row(s) in 0.6580 seconds
テーブルを有効化した後に scan する。エラーが発生しなければ、テーブルが正常に有効化されたということである。
hbase(main):020:0> scan 'order'
ROW COLUMN+CELL
0 row(s) in 0.0730 seconds
is_enabled
is_enabled コマンドは、テーブルが有効化されているかを確認するために使用される。構文は次のとおりである。
is_enabled '<table name>'
次のコマンドは、order というテーブルが有効化されているかどうかを確認する。有効化されていれば true を返し、そうでなければ false を返す。
hbase(main):021:0> is_enabled 'order'
true
0 row(s) in 0.0750 seconds
describe - テーブル説明
describe コマンドは、テーブルに関する説明を返す。構文は次のとおりである。
describe '<table name>'
次は order テーブルに対する describe コマンドの出力である。
hbase(main):006:0> describe 'order'
DESCRIPTION ENABLED
'order', {NAME => 'customer', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCO true
PE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELL
S => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'sales', DATA_BLO
CK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NON
E', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY =
> 'false', BLOCKCACHE => 'true'}
1 row(s) in 0.1450 seconds
alter - テーブル変更
alter は既存のテーブルを変更するために使用されるコマンドである。このコマンドを使用して、column family の最大 cell 数を変更したり、テーブルスコープ演算子を設定および削除したり、テーブルから column family を削除したりできる。
Column Family の最大 cell 数変更
次は column family の最大 cell 数を変更する構文である。
alter '<table name>', NAME => '<column family>', VERSIONS => 5
次の例では最大 cell 数を 5 に設定する。
hbase(main):007:0>alter 'order', NAME => 'customer', VERSIONS => 5
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.4240 seconds
hbase(main):009:0>
テーブルスコープ演算子
alter を使用すると、MAX_FILESIZE、READONLY、MEMSTORE_FLUSHSIZE、DEFERRED_LOG_FLUSH などのテーブルスコープ演算子を設定および削除できる。
READONLY - 読み取り専用設定
次はテーブルを読み取り専用にする構文である。
alter '<table name>', READONLY(option)
次の例では、order テーブルを読み取り専用にしている。
hbase(main):009:0> alter 'order', READONLY
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.3650 seconds
MAX_FILESIZE - region 設定変更
MAX_FILESIZE で region 設定を変更する。
alter 't1', MAX_FILESIZE => '123217728'
region の最大サイズを 128 MB に変更する。
Column Family 削除
alter を使用すると column family を削除することもできる。次は alter を使用して column family を削除する構文である。
alter '<table name>', 'delete' => '<column family>'
次は order テーブルから column family を削除する例である。
hbase(main):010:0> alter 'order', 'delete' => 'sales'
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.3790 seconds
describe コマンドで確認すると、'sales' が消えたことがわかる。
hbase(main):011:0> describe 'order'
DESCRIPTION ENABLED
'order', {NAME => 'READONLY', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCO true
PE => '0', COMPRESSION => 'NONE', VERSIONS => '1', TTL => 'FOREVER', MIN_VERSIONS => '0', KEEP_DELETED_CELL
S => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}, {NAME => 'customer', DATA_
BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS => '5', COMPRESSION => '
NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMOR
Y => 'false', BLOCKCACHE => 'true'}
1 row(s) in 0.0850 seconds
drop - テーブル削除
drop コマンドを使用してテーブルを削除できる。構文は次のとおりである。
drop '<table name>'
テーブルを削除する前に無効化する必要がある。
hbase(main):024:0> disable 'order'
0 row(s) in 1.3960 seconds
hbase(main):025:0> drop 'order'
0 row(s) in 0.2860 seconds
exists コマンドを使用して、テーブルが削除されたかを確認する。
hbase(main):026:0> exists 'order'
Table order does not exist
0 row(s) in 0.0710 seconds
drop_all
drop_all コマンドは、指定した正規表現に一致するすべてのテーブルを削除するために使用される。構文は次のとおりである。
drop_all '<regex table name>'
簡単な例を次に示す。次のコマンドは t で始まるすべてのテーブルを削除する。
drop_all 't.*'
参考: 対象のすべてのテーブルは、削除する前に無効化する必要がある。