hbase创建表:
1、必须要指定表名和至少一个列族

create 't01','cf01'


如果是字符串的话,需要加上引号


创建一个带有多个列族的表



create 't03','cf01','cf02'

2、增加记录


      每一次put,是一个cell为单位


  

put 't01','rowkey001','cf01:name','zs'
       put 't01','rowkey001','cf01:age','18'
       put   表名   主键      列族名:字段名   值

3、获取一行记录


get 't01','rowkey001'

4、约计表中的记录


count 't01'

5、删除某一个单元格的值


delete 't01','rowkey001','cf01:name'

6、删除表


    之前需要先将表进行禁用:

disable 't02'
	drop 't02'

7、查询表中的所有记录 


scan 't01'

8、scan时,只需要看到某些字段


 

scan 't01',{COLUMNS=>'cf01:name'}
       scan 't01',{columns=>'cf01:name'}   ---执行不成功的


在hbase中关键是要区分大小写的,


显示多个字段


scan 't01',{COLUMNS=>'cf01:name',COLUMNS=>'cf01:age'}


    当有多个属性名相同的时候,以最后一个为准


scan 't01',{COLUMNS=>['cf01:name','cf01:age']}

1、在创建表的时候,默认的版本数为1,可以通过页面或者desc 表名  的方式进行查询
   TTL 设置某一个值的有效期  ttl默认是永久的。
   Region(区间) 是多个rowkey组成的一个region,一个表中可以有一个到多个region
 1.1为某一个张设置多个版本

create 't04',{NAME=>'cf01',VERSIONS=>3}


hbase中所说的版本是针对于表还是列族?--列族【一张表中,不同的列族可以有不同的版本数】


create 't05',{NAME=>'cf01',VERSIONS=>3},'cf02'

  1.2为某一个列族设置值的有效期

create 't06',{NAME=>'cf01',TTL=>5}  ttl的单位是秒

  1.3:SPLITS关键字的使用

create 't1', 'f1', SPLITS => ['10', '20', '30', '40']
	 SPLITS:是针对一张表来进行设置
     create 't07','cf01',SPLITS=>['10', '20', '30', '40']
	 SPLITS:1、确定了该表一共有多少个region==>splits数量+1
	        2、因为第一个region的start key为null
		最后一个region的end key为null

  1.4设置region num

create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
       create 't08','cf01',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}

   可以确定一共有多少个region,但是每一个region的start key和end key是后面的HexStringSplit来指定,不是用户定义。


==========put的操作============


   会有一个时间版本来控制数据的【默认显示】,数值最大的在最前面,如果在put时,没有指定,将以系统的当前时间毫秒数作为时间戳。

其它shell命令操作

通过put进行添加数据,“t04”代表表名,“rowkey001”代表主键,“cf01”代表列族,"name"为属性名,“zs1”为值

put 't04','rowkey001','cf01:name','zs1'
        put 't04','rowkey002','cf01:name','zs2'
        put 't04','rowkey003','cf01:name','zs3'
        put 't04','rowkey004','cf01:name','zs4'
        put 't04','rowkey005','cf01:name','zs5'
        put 't04','rowkey006','cf01:name','zs6'
        put 't04','rowkey007','cf01:name','zs7'
        put 't04','rowkey008','cf01:name','zs8'

        put 't04','abcdef','cf01:name','zs8'
        put 't04','rowkey011','cf01:name','zs1'
        put 't04','rowkey012','cf01:name','zs1'
        put 't04','rowkey013','cf01:name','zs1'
        put 't04','rowkey014','cf01:name','zs1'
        put 't04','rowkey014','cf01:age','20'
        put 't04','rowkey001','cf01:name1','zs11'
        put 't04','rowkey001','cf01:name2','zs12'

1.1根据时间戳的方式查询

get 't04','rowkey001',{TIMERANGE=>[1522077826257,1522077925831]}

不包括最后一个值:1522077925831


1.2根据字段名查询

get 't04','rowkey001',{COLUMNS=>['cf01:name1','cf01:name2']}

当前的数据值为: cf01:name1 timestamp=1522077925830, value=zs11

put 't04','rowkey001','cf01:name1','zs11_new'
get 't04','rowkey001',{COLUMNS=>'cf01:name1',TIMESTAMP=>1522077925830}
get 't04','rowkey001',{COLUMNS=>'cf01:name1',VERSIONS=>3}
put 't04','rowkey001','cf01:name1','zs11_new1'
put 't04','rowkey001','cf01:name1','zs11_new2'

如果当前的列族的version为3,那么我们put同一个rowkey同一个字段名的时候,4次,那么通过versions的方式拿到还是最新的三条记录。


如果在get的时候,指定的versions大于列族的version数量以列族的版本为准。


get 't04','rowkey001',{COLUMNS=>'cf01:name1',TIMESTAMP=>1522077925830}

问题存在:如果通过指定时间戳的方式,还是可以拿出超过版本数的值。


          hbase的数据,如果出现版本超出,并不是马上执行,会在后期有一个统一的【合并】操作。


简写的方式:

get 't04','rowkey001','cf01:name','cf01:name1'

 ============scan的使用=============

scan 't04'
scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
scan 't04',{COLUMNS=>'cf01:name',LIMIT=>3}
STARTROW=>开启的rowkey
scan 't04',{COLUMNS=>'cf01:name',LIMIT=>3,STARTROW=>'rowkey003'}

以前表都是存储在数据库中。在hbase当中没有数据库的概念,是用namespace【命名空间】来管理表


        list_namespace查看当前hbase中有哪些namespace


        default:默认用户创建的表都存储在该namespace中


        hbase:为hbase管理的namespace。如有哪些namespace是用户创建的,用户创建哪些table,table下有哪些列族。有哪些region


如果操作的时候,不是default的命名空间的话,需要在表名前面加上 命名空间:表名 

scan 't1', {REVERSED => true}
scan 't04',{COLUMNS=>'cf01:name',LIMIT=>3,STARTROW=>'rowkey003',REVERSED => true}

REVERSED:如果有limit和STARTROW是向上进行查询。



hbase也可以通过非主键的方式进行查询---------过滤器


根据指定主键的前缀进行查询

scan 't04', {ROWPREFIXFILTER => 'rowkey'}
        scan 't04', {ROWPREFIXFILTER => 'row2', FILTER => " (QualifierFilter (>=, 'binary:xyz')) "}
        scan 't04', {ROWPREFIXFILTER => 'rowkey01',FILTER => " (QualifierFilter (>=, 'binary:rowkey013')) "}

binary:是将字段串转为字节数组


QualifierFilter:过滤字段名



incr 如果事先已经有值话,采用incr将会出现错误,所以初始值也得incr来设置

incr 't04','rowkey0018','cf01:age'
incr 't04','rowkey0018','cf01:age',10      10------>步长

-----incr可以保存原子操作: