SQLとHbaseの操作比較
出典: LunaBiblos
Software > DataBase > KeyValueストア > HBaseの利用 > SQLとHbaseの操作比較
目次 |
概要
ここではHbaseで使われるHbase Shellに関しての説明を行います。従来のSQLの処理と、それに相当するHbase Shellの書き方を並べて記述しています。
基本的にこのSQLをHbase Shellで書いたら、を解説します。
Hbase Shell独自の機能はHbase独自のtable/Data操作を参照してください。
RDBが二次元構造だったのに対してHbaseは三次元構造になっている為、最初はちょっと解りにくいかも知れません。
- 参考:Hadoop Wiki Hbase/Shell
- Hbase0.2のhelpの取得結果:Hbase:0.2Help
RDBとHBaseの差異
全て主語は「Hbase」です。
- IndexはCreate文ではなくInsert文で作る
- Indexに相当するKeyのみが検索条件の対象と成ります。
- Tableの有効無効概念があり、無効状態のTableのみが削除可能
- Timestampの概念を標準で保持している。
Table作成
ポケモンIDがIndexKeyでポケモンID(POKE_ID)、身長(HEIGHT)、ポケモン名称(NAME)の三つの項目を持ったポケモン情報のTableを作ります。
| SQL | Hbase Shell |
|---|---|
| CREATE TABLE 'Pokemon' ( 'POKE_ID' NUMBER(10), 'HEIGHT' NUMBER(10), 'NAME' NVARCHAR2(10) ) CREATE UNIQUE INDEX 'Pokemon_Key' ON 'Pokemon' ('POKE_ID'); | create 'Pokemon', {NAME=>'POKE_ID'}, {NAME=>'HEIGHT'}, {NAME=>'NAME'} |
Table構成変更
| 作業 | SQL | Hbase Shell |
|---|---|---|
| 体重(WEIGHT)の追加 | ALTER TABLE 'Pokemon' ADD 'WEIGHT' NVARCHAR(10); | disable 'Pokemon' alter 'Pokemon', {NAME=>'WEIGHT'} enable 'Pokemon' |
| 体重(WEIGHT)の削除 | ALTER TABLE 'Pokemon' DROP 'WEIGHT'; | disable 'Pokemon' alter 'Pokemon', {NAME=>'WEIGHT', METHOD=>'delete'} enable 'Pokemon' |
Table削除
| SQL | Hbase Shell |
|---|---|
| drop table 'Pokemon'; | disable 'Pokemon' drop 'Pokemon' |
Data登録
ポケモンIDがIndexKeyでポケモンIDが「10001」、身長が「30」、ポケモン名称「PIKACHU」のポケモンを登録します。
| SQL | Hbase Shell |
|---|---|
| INSERT INTO 'Pokemon' (POKE_ID,HEIGHT,NAME) VALUES (10001,30,'PIKACHU'); | put 'Pokemon', '10001', 'POKE_ID', '10001', 20090929 put 'Pokemon', '10001', 'HEIGHT', '30', 20090929 put 'Pokemon', '10001', 'NAME', 'PIKACHU', 20090929 |
Data取得
条件は全て「ポケモンIDが「10001」」です。
| 取得方法 | SQL | Hbase Shell |
|---|---|---|
| 全項目を取得 | SELECT * FROM Pokemon WHERE POKE_ID = 10001; | get 'Pokemon', '10001' |
| ポケモンの名前を取得 | SELECT NAME FROM Pokemon WHERE POKE_ID = 10001; | get 'Pokemon', '10001', {COLUMN => 'NAME:'} |
| ポケモンの名前と身長を取得 | SELECT NAME,HEIGHT FROM Pokemon WHERE POKE_ID = 10001; | get 'Pokemon', '10001', {COLUMN => ['NAME:', 'HEIGHT:']} |
Data検索
特定の条件を元に名前を取得します。
| 検索方法 | SQL | Hbase Shell |
|---|---|---|
| ポケモンIDが10001 | SELECT NAME FROM Pokemon WHERE POKE_ID = 10001; | scan 'Pokemon', {COLUMNS => 'NAME:', STARTROW => '10001', STOPROW=>'10002'} |
| ポケモン身長が30 | SELECT NAME FROM Pokemon WHERE HEIGHT = 30; | IndexKeyが身長ではないので検索が出来ません |
Data削除
| 検索方法 | SQL | Hbase Shell |
|---|---|---|
| 一括削除 | truncate table 'Pokemon' | truncate 'Pokemon' |
| ポケモンIDが10001の 身長(HEIGHT)を空にする | UPDATE 'Pokemon' SET 'HEIGHT'=null WHERE POKE_ID=10001 | delete 'Pokemon', '10001', 'HEIGHT' |
Hbase Shellの「truncate」は、内部で「disable drop create」が連続して行われています。
