1 DDL
1.1 建表
create :建表 hbase(main):010:0> create 'user_info','base_info','extra_info' => Hbase::Table - user_info hbase(main):043:0> create 'ns1:user_info', {NAME=>'base_info', BLOOMFILTER=>'ROWCOL',VERSIONS=>'3'}
1.2 list : 查询所有的表
hbase(main):002:0> list TABLE ns1:t1 ns1:user_info 2 row(s) in 0.2830 seconds => ["ns1:t1", "ns1:user_info"]
1.3 describe : 查询表结构
hbase(main):003:0> describe 'ns1:user_info' Table ns1:user_info is ENABLED ns1:user_info COLUMN FAMILIES DESCRIPTION {NAME => 'base_info', BLOOMFILTER => 'ROWCOL', VERSIONS => '3', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
1.4 create , splits : 创建表分片
hbase(main):007:0> create 'ns1:t2', 'f1', SPLITS => ['10', '20', '30', '40']
1.5 修改表
1.5.1alter : 修改表,添加修改列簇信息
hbase(main):009:0> alter 'ns1:t1', {NAME=>'lixi_info'} hbase(main):010:0> describe 'ns1:t1' Table ns1:t1 is ENABLED ns1:t1 COLUMN FAMILIES DESCRIPTION {NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', B LOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} {NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', B LOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} {NAME => 'lixi_info', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 3 row(s) in 0.0250 seconds
1.5.2删除列簇
hbase(main):014:0> alter 'ns1:t1', 'delete' => 'lixi_info' hbase(main):015:0> describe 'ns1:t1' Table ns1:t1 is ENABLED ns1:t1 COLUMN FAMILIES DESCRIPTION {NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', B LOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} {NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', B LOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 2 row(s) in 0.0170 seconds
1.5.3删除表(先要disable表,再删除表)
hbase(main):016:0> disable 'ns1:t1' 0 row(s) in 2.2790 seconds hbase(main):017:0> drop 'ns1:t1' 0 row(s) in 1.2900 seconds hbase(main):018:0> list TABLE ns1:t2 ns1:user_info 2 row(s) in 0.0090 seconds => ["ns1:t2", "ns1:user_info"]
2 DML
2.1 插入数据(put命令,不能一次性插入多条)
hbase(main):012:0> put 'user_info','001','base_info:username','lixi' 0 row(s) in 0.9800 seconds
2.2 scan扫描
hbase(main):024:0> scan 'user_info' ROW COLUMN+CELL 001 column=base_info:love, timestamp=1538897913186, value=basketball 001 column=base_info:username, timestamp=1538897633942, value=lixi 002 column=base_info:username, timestamp=1538898168513, value=lishiming 2 row(s) in 0.0520 seconds
2.2.1通过指定版本查询
hbase(main):024:0> scan 'user_info', {RAW => true, VERSIONS => 1} ROW COLUMN+CELL 001 column=base_info:age, timestamp=1546922817429, value=32 001 column=base_info:name, timestamp=1546923712904, value=rock 001 column=extra_info:feature, timestamp=1546922881922, value=shuai 001 column=super_info:size, timestamp=1546922931075, value=111 1 row(s) in 0.0160 seconds hbase(main):025:0> scan 'user_info', {RAW => true, VERSIONS => 2} ROW COLUMN+CELL 001 column=base_info:age, timestamp=1546922817429, value=32 001 column=base_info:name, timestamp=1546923712904, value=rock 001 column=base_info:name, timestamp=1546922810789, value=lixi 001 column=extra_info:feature, timestamp=1546922881922, value=shuai 001 column=super_info:size, timestamp=1546922931075, value=111 1 row(s) in 0.0180 seconds
2.2.2查询指定列的数据
hbase(main):014:0> scan 'user_info',{COLUMNS => 'base_info:name'} ROW COLUMN+CELL 001 column=base_info:name, timestamp=1546923712904, value=rock
2.2.3分页查询
hbase(main):021:0> scan 'user_info', {COLUMNS => ['base_info:name', 'base_info:age'], LIMIT => 10, STARTROW => '001'} ROW COLUMN+CELL 001 column=base_info:age, timestamp=1546922817429, value=32 001 column=base_info:name, timestamp=1546923712904, value=rock
2.3 get查询
hbase(main):015:0> get 'user_info','001','base_info:username' COLUMN CELL base_info:username timestamp=1538897633942, value=lixi 1 row(s) in 0.2500 seconds hbase(main):017:0> put 'user_info','001','base_info:love','basketball' 0 row(s) in 0.0140 seconds hbase(main):018:0> get 'user_info','001' COLUMN CELL base_info:love timestamp=1538897913186, value=basketball base_info:username timestamp=1538897633942, value=lixi
2.3.1根据时间戳查询
hbase(main):029:0> get 'user_info', '001', {TIMERANGE => [1546922817429, 1546922931075]} COLUMN CELL base_info:age timestamp=1546922817429, value=32 extra_info:feature timestamp=1546922881922, value=shuai
2.4 hbase的一个重要特性:排序特性(rowkey)
插入到hbase中去的数据,hbase会自动排序存储: 排序规则: 首先看行键,然后看列族名,然后看列(key)名; 按字典顺序 Hbase的这个特性跟查询效率有极大的关系 比如:一张用来存储用户信息的表,有名字,户籍,年龄,职业....等信息 然后,在业务系统中经常需要: 查询某个省的所有用户 经常需要查询某个省的指定姓的所有用户 思路:如果能将相同省的用户在hbase的存储文件中连续存储,并且能将相同省中相同姓的用户连续存储,那么,上述两个查询需求的效率就会提高!!! 做法:将查询条件拼到rowkey内
2.5 更新数据
hbase(main):010:0> put 'user_info', '001', 'base_info:name', 'rock' 0 row(s) in 0.1420 seconds
2.6 incr
hbase(main):053:0> incr 'user_info', '002', 'base_info:age3' COUNTER VALUE = 1 0 row(s) in 0.0290 seconds hbase(main):055:0> scan 'user_info' ROW COLUMN+CELL 001 column=base_info:age, timestamp=1546922817429, value=32 001 column=base_info:name, timestamp=1546923712904, value=rock 001 column=extra_info:feature, timestamp=1546922881922, value=shuai 001 column=super_info:size, timestamp=1546922931075, value=111 002 column=base_info:age2, timestamp=1546924991038, value=11 002 column=base_info:age3, timestamp=1546925153059, value=\x00\x00\x00\x00\x00\x00\x00\x02 2 row(s) in 0.1020 seconds
2.7 删除数据
2.7.1删除一个kv数据
hbase(main):058:0> delete 'user_info', '002', 'base_info:age3' 0 row(s) in 0.0180 seconds hbase(main):059:0> scan 'user_info' ROW COLUMN+CELL 001 column=base_info:age, timestamp=1546922817429, value=32 001 column=base_info:name, timestamp=1546923712904, value=rock 001 column=extra_info:feature, timestamp=1546922881922, value=shuai 001 column=super_info:size, timestamp=1546922931075, value=111 002 column=base_info:age2, timestamp=1546924991038, value=11
2.7.2删除一行数据
hbase(main):028:0> deleteall 'user_info','001' 0 row(s) in 0.0100 seconds hbase(main):029:0> scan 'user_info' ROW COLUMN+CELL
2.7.3删除指定的版本
hbase(main):081:0> delete 'user_info','001','extra_info:feature', TIMESTAMP=>1546922931075
2.7.4删除一个表数据
disable 'user_info' drop 'user_info'
2.7.5判断表是否存在
hbase(main):083:0> exists 'user_info' Table user_info does exist 0 row(s) in 0.0130 seconds
2.7.6表生效和失效
hbase(main):084:0> enable 'user_info' 0 row(s) in 0.0130 seconds hbase(main):085:0> disable 'user_info' 0 row(s) in 2.5100 seconds
2.7.7统计表行数
hbase(main):088:0> count 'user_info' 1 row(s) in 0.0300 seconds => 1
2.7.8清空表数据
hbase(main):089:0> truncate 'user_info'