#每次運行hbase shell之前一定要到進入/usr/local/Cellar/hbase/1.3.5/bin 目錄下,運行./start-hbase.sh,進行啓動。
在終端hbase shell
#新建表
hbase(main):049:0> create 't1',’f1'
0 row(s) in 1.2610 seconds
=> Hbase::Table - t1
#查看錶結構
hbase(main):050:0> desc 't1'
Table t1 is ENABLED
t1
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6553
6', REPLICATION_SCOPE => '0'}
1 row(s) in 0.0130 seconds
#修改f1的的VERSIONS的值爲3,VERSIONS爲1,也就是說,默認情況只會存取一個版本的列數據,當再次插入的時候,後面的值會覆蓋前面的值。
hbase(main):051:0> alter 't1',{'NAME'=>'f1',VERSIONS=>3}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 1.9170 seconds
4.查看t1結構
hbase(main):053:0> desc 't1'
Table t1 is ENABLED
t1
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMP
RESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6553
6', REPLICATION_SCOPE => '0'}
1 row(s) in 0.0220 seconds
#插入三條數據
hbase(main):054:0> put 't1','rowkey1','f1:name','haha'
0 row(s) in 0.0230 seconds
hbase(main):055:0> put 't1','rowkey1','f1:name','xy234'
0 row(s) in 0.0040 seconds
hbase(main):056:0> put 't1','rowkey1','f1:name','qiudk'
0 row(s) in 0.0030 seconds
#查看數據
hbase(main):057:0> get 't1','rowkey1','f1:name'
COLUMN CELL
f1:name timestamp=1581320608297, value=qiudk
1 row(s) in 0.0030 seconds
#查看三個版本的數據
hbase(main):058:0> get 't1','rowkey1',{COLUMN=>'f1:name',VERSIONS=>3}
COLUMN CELL
f1:name timestamp=1581320608297, value=qiudk
f1:name timestamp=1581320602481, value=xy234
f1:name timestamp=1581320595161, value=haha
1 row(s) in 0.0050 seconds
#只查看最新的兩個版本
hbase(main):059:0> get 't1','rowkey1',{COLUMN=>'f1:name',VERSIONS=>2}
COLUMN CELL
f1:name timestamp=1581320608297, value=qiudk
f1:name timestamp=1581320602481, value=xy234
1 row(s) in 0.0060 seconds
#列出所有的表
hbase(main):060:0> list
TABLE
linkshare
student
t1
3 row(s) in 0.0170 seconds
=> ["linkshare", "student", "t1"]
#新建user表,包含info,data兩個列族
hbase(main):061:0> create 'user','info','data'
0 row(s) in 2.2990 seconds
=> Hbase::Table - user
#描述表信息
hbase(main):063:0> desc 'user'
Table user is ENABLED
user
COLUMN FAMILIES DESCRIPTION
{NAME => 'data', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KE
EP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', CO
MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65
536', REPLICATION_SCOPE => '0'}
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KE
EP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', CO
MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65
536', REPLICATION_SCOPE => '0'}
2 row(s) in 0.0270 seconds
#修改列族版本
hbase(main):064:0> alter 'user',{NAME=>'info',VERSIONS=>3}
Updating all regions with the new schema...
1/1 regions updated.
Done.
0 row(s) in 2.4320 seconds
#重新查看錶信息
hbase(main):065:0> desc 'user'
Table user is ENABLED
user
COLUMN FAMILIES DESCRIPTION
{NAME => 'data', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KE
EP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', CO
MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65
536', REPLICATION_SCOPE => '0'}
{NAME => 'info', BLOOMFILTER => 'ROW', VERSIONS => '3', IN_MEMORY => 'false', KE
EP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', CO
MPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65
536', REPLICATION_SCOPE => '0'}
2 row(s) in 0.0140 seconds
#添加信息
hbase(main):067:0> put 'user' ,'rk0001','info:name’,’huahua'
0 row(s) in 0.0110 seconds
hbase(main):068:0> put 'user' ,'rk0001','info:gender','female'
0 row(s) in 0.0040 seconds
hbase(main):069:0> put 'user' ,'rk0001','data:pic','pucture'
0 row(s) in 0.0040 seconds
#獲取鍵’rk0001’的信息
hbase(main):073:0> get 'user','rk0001'
COLUMN CELL
data:pic timestamp=1581323814574, value=pucture
info:gender timestamp=1581323795685, value=female
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0160 seconds
#獲取鍵’rk0001’中info的信息
hbase(main):074:0> get 'user','rk0001','info'
COLUMN CELL
info:gender timestamp=1581323795685, value=female
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0030 seconds
#獲取鍵’rk0001’中info:name的信息
hbase(main):075:0> get 'user','rk0001','info:name'
COLUMN CELL
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0020 seconds
#增加一個rk0002
hbase(main):076:0> put 'user' ,'rk0002','info:name','liwu'
0 row(s) in 0.0030 seconds
hbase(main):077:0> put 'user' ,'rk0002','info:gender','man'
0 row(s) in 0.0030 seconds
#獲取rk0001中info和data的信息
hbase(main):078:0> get 'user','rk0001','info','data'
COLUMN CELL
data:pic timestamp=1581323814574, value=pucture
info:gender timestamp=1581323795685, value=female
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0050 seconds
#和上面那個是等價的吧
hbase(main):079:0> get 'user','rk0001',{COLUMN=>['info','data']}
COLUMN CELL
data:pic timestamp=1581323814574, value=pucture
info:gender timestamp=1581323795685, value=female
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0150 seconds
hbase(main):080:0> get 'user','rk0001',{COLUMN=>['info:name','data:pic']}
COLUMN CELL
data:pic timestamp=1581323814574, value=pucture
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0080 seconds
hbase(main):081:0> get 'user','rk0002',{COLUMN=>['info:name','data:pic']}
COLUMN CELL
info:name timestamp=1581323970369, value=liwu
1 row(s) in 0.0030 seconds
#因爲只有一個,故只顯示一個
hbase(main):083:0> get 'user','rk0001',{COLUMN=>'info',VERSIONS=>2}
COLUMN CELL
info:gender timestamp=1581323795685, value=female
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0130 seconds
#添加一個更改gender
hbase(main):084:0> put 'user' ,'rk0001','info:gender','man'
0 row(s) in 0.0040 seconds
#可以看到gender的兩個版本
hbase(main):085:0> get 'user','rk0001',{COLUMN=>'info',VERSIONS=>2}
COLUMN CELL
info:gender timestamp=1581324240884, value=man
info:gender timestamp=1581323795685, value=female
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0160 seconds
#使用過濾器來進行查詢,查詢value的值爲‘huahua’數據,即cell中value的值
hbase(main):095:0> get 'user','rk0001',{FILTER=>"(ValueFilter(=,'binary:huahua'))"}
COLUMN CELL
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0040 seconds
#查看user表中列標示符中含有a的信息
hbase(main):101:0> get 'user', 'rk0001', {FILTER => "(QualifierFilter(=,'substring:a'))"}
COLUMN CELL
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0310 seconds
#查看user表中列標示中含有n的信息:即COLUMN中含有字母n的
hbase(main):104:0> get 'user','rk0001',{FILTER=>"(QualifierFilter(=,'substring:n'))"}
COLUMN CELL
info:gender timestamp=1581324240884, value=man
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0080 seconds
#查看全表信息
hbase(main):103:0> scan 'user'
ROW COLUMN+CELL
rk0001 column=data:pic, timestamp=1581323814574, value=pucture
rk0001 column=info:gender, timestamp=1581324240884, value=man
rk0001 column=info:name, timestamp=1581323779460, value=huahua
rk0002 column=info:gender, timestamp=1581323995580, value=man
rk0002 column=info:name, timestamp=1581323970369, value=liwu
2 row(s) in 0.0080 seconds
此時就好奇了,scan和get的區別到底是啥?
hbase的查詢實現提供兩種方式:
get方法: 按指定rowkey獲取唯一一條記錄
scan方法:按指定條件獲取一批記錄
hbase(main):105:0> scan 'user',{COLUMNS=>'info'}
ROW COLUMN+CELL
rk0001 column=info:gender, timestamp=1581324240884, value=man
rk0001 column=info:name, timestamp=1581323779460, value=huahua
rk0002 column=info:gender, timestamp=1581323995580, value=man
rk0002 column=info:name, timestamp=1581323970369, value=liwu
2 row(s) in 0.0190 seconds
#用get試試呢?竟然爲空~
hbase(main):106:0> get 'user',{COLUMNS=>'info'}
COLUMN CELL
0 row(s) in 0.0020 seconds
#需要加個鍵名(貌似理解了get和scan的區別,get必須指定rowkey,而scan的話,就無須)
hbase(main):109:0> get 'user','rk0001',{COLUMNS=>'info'}
COLUMN CELL
info:gender timestamp=1581324240884, value=man
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0030 seconds
hbase(main):110:0> get 'user','rk0001','info'
COLUMN CELL
info:gender timestamp=1581324240884, value=man
info:name timestamp=1581323779460, value=huahua
1 row(s) in 0.0030 seconds
#查詢user表中指定範圍的數據
hbase(main):118:0> scan 'user',{TIMERANGE=>[1581323970369,1581324240884]}
ROW COLUMN+CELL
rk0002 column=info:gender, timestamp=1581323995580, value=man
rk0002 column=info:name, timestamp=1581323970369, value=liwu
1 row(s) in 0.0080 seconds
#查詢user表中row key以rk字符開頭的
hbase(main):119:0> scan 'user',{FILTER=>"PrefixFilter('rk')"}
ROW COLUMN+CELL
rk0001 column=data:pic, timestamp=1581323814574, value=pucture
rk0001 column=info:gender, timestamp=1581324240884, value=man
rk0001 column=info:name, timestamp=1581323779460, value=huahua
rk0002 column=info:gender, timestamp=1581323995580, value=man
rk0002 column=info:name, timestamp=1581323970369, value=liwu
2 row(s) in 0.0200 seconds
#查詢user表中列族爲info和data且列標示符中含有a字符的信息
hbase(main):120:0> scan 'user',{COLUMNS=>['info','data'],FILTER=>"(QualifierFilter(=,'substring:a'))"}
ROW COLUMN+CELL
rk0001 column=info:name, timestamp=1581323779460, value=huahua
rk0002 column=info:name, timestamp=1581323970369, value=liwu
2 row(s) in 0.0280 seconds
#刪除數據
hbase(main):121:0> delete 'user','rk0001','info:name'
0 row(s) in 0.0270 seconds
hbase(main):122:0> scan 'user'
ROW COLUMN+CELL
rk0001 column=data:pic, timestamp=1581323814574, value=pucture
rk0001 column=info:gender, timestamp=1581324240884, value=man
rk0002 column=info:gender, timestamp=1581323995580, value=man
rk0002 column=info:name, timestamp=1581323970369, value=liwu
細水長流~