【6-2】hbase shell

来源:互联网 发布:上海知慧太阳能垃圾箱 编辑:程序博客网 时间:2024/06/05 07:57

shell,即使用命令行的方式来创建表,插入数据。

创建表,修改表,删除表是ddl,插入数据,删除数据是dml(数据库操作语言)

不会的时候 help+命令

创建一个表,create 'people',{NAME=>'info',VERSIONS=>3},{NAME=>'data',VERSIONS=>1}

回车之后,发现table里面有一个表了


输入list 可以看到有这个表


然后describe 'people'


接下来,往里面插入数据(属于dml),先help dml回车看一下

不会的时候,查看它的文档  help ‘XXX’

插入数据:put  'people','rk0001',(这个是row key),‘info:name’(列族加列的名称),'cls'

查看数据:scan 'people'



我们也可以添加别的属性:put 'people','rk0001','info:gender','female'

没有显示插入失败。接下来再查看一下:scan 'people'

接下来该返回1行数据【因为主键相同】,一个是info列族加name列,另一个是info列族加gender列

再插入一些信息:(也可以用people.put)put 'people', 'rk0001','info:size','36'

成功了。再scan一下,可以看到一条记录,这个记录有三个列。【最开始我指定了两个列族,我也可以往另一个列族里面插入数据】:put 'people','rk0001','data:torrent'(data也是一个列族),'zhongzi'

回车,存进去了。scan一下 scan ‘people’

现在有一行四列,中文也被转化成了二进制。


这个表的物理结构是什么?【留作后面学】

再插入一条:put 'people','rk0002',(插入一个列,一个shell,由列族和列名称组成)'info:name','bdyjy'

这时候scan,应该返回两行。

继续插入:put 'people','rk0002','info:gender‘(列族下面有多少个列,随便设,这个比关系型数据库好),'female'

现在scan,有两行,rk0001,rk0002,两行,第一行里面有4列,第二行有2列。

【关系型数据库不能保存这么灵活】

现在,put 'people','rk0001','info:size','37'

再变,put 'people','rk0001','info:size','37.5'

再scan,发现这个值变了,【这个值被覆盖掉了吗?】NO 还记得列族的VERSION吗 当时设置的是3

scan 'people',(加一个过滤条件){COLLUMNS =>'info',VERSIONS =>3}

此时发现,value=36,37,37.5 三个都有,此时如果再增加38 那么第一个36没了(因为最大的版本只能存放3个)

Q:我能不能把被覆盖掉的36查出来?

A:加一个raw=true 【当版本超过3之后,打一个标记位,就删掉了,但是内存还没有进行flush】

我先退出shell:quit

再把HMaster停掉:./stop-hbase.sh

然后再来一次,start,./hbase-shell,再查一下,发现还有


现在画一下这个表的结构

两个列族,info和data,每个列族下面有列

cls多个版本都保存在这里


我的rk002只有两列,没有数据的地方,在关系型数据库里面,是占用空间的(因为你定义类型了varchar),但是在hbase里,bdyjy这个里有许多是空的,

一个cell可以保存多个值,每个值有一个timestamp。

Q:如何定位一个cell? 先一个row key(行) ,然后一个列族中的一个列的标识符(列),如果我想查cell里的某个值,它默认会给我最新的,如果我想查特定的某个值,需要查它的timestamp

0 0
原创粉丝点击