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 というテーブルのサンプルスキーマである。ここには customersales という 2 つの column family がある。

HBase 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 cf1cf2cf3 を作成する。

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_followdev_frienddev_testdev_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_FILESIZEREADONLYMEMSTORE_FLUSHSIZEDEFERRED_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.*'

参考: 対象のすべてのテーブルは、削除する前に無効化する必要がある。