HBase Shell命令使用

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可以保存原子操作:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值