shell 命令行中操作HBase数据库实例详解

2019-10-13 16:06:34刘景俊

全表扫描:

 
hbase(main):033:0> scan ¨t¨
 
ROW                     COLUMN+CELL                                                         
 
10001                   column=t_info:general, timestamp=1365670813664, value=his fullname is junsanis!                       
 
10001                   column=t_vl:age, timestamp=1365670912700, value=10                                     
 
10001                   column=t_vl:name, timestamp=1365670723056, value=jss                                    
 1 row(s) in 0.0370 seconds

全表描述某个列:

hbase(main):036:0> scan ¨t¨, {COLUMNS => ¨t_vl¨}
 
ROW                     COLUMN+CELL                                                         
 
10001                   column=t_vl:age, timestamp=1365670912700, value=10                                     
 
10001                   column=t_vl:name, timestamp=1365670723056, value=jss                                    
 1 row(s) in 0.0080 seconds

删除记录行:

 
 
hbase(main):043:0> delete ¨t¨,¨10001¨,¨t_vl:age¨
 
0 row(s) in 0.0050 seconds
 
 
hbase(main):045:0> get ¨t¨,¨10001¨
 
COLUMN                   CELL                                                            
 
t_info:general               timestamp=1365670813664, value=his fullname is junsanis!                                  
 
t_vl:name                 timestamp=1365670723056, value=jss                                             
 2 row(s) in 0.0070 seconds

 删除表:

 
 
hbase(main):047:0> disable ¨t¨
 
0 row(s) in 2.0230 seconds
 
 
hbase(main):048:0> drop ¨t¨
 0 row(s) in 1.1170 seconds

 看完前面的例子,大家有没有问题,或者想到了什么?我脑子里反正是蹦出问号了:HBase中没有UPDATE操作,只有INSERT,可是我们每次put新记录都替换掉了旧的版本,怎么保存大量记录呢?难道每个row key的columns中只能存在一条记录?这不科学!这也显然不是人民群众期待并且喜闻乐见的表现嘛。 

这个问题呀,其实是列值保存版本(VERSIONS)或保留时间(TTL, Time to Liv)在起作用。 

比如,我们希望统计某用户的最近(n条)浏览记录,那么,创建HBase表对象如下: 

hbase> create ¨rlog¨,¨userid¨,{NAME=>¨article¨,VERSIONS=>100} 

当前设定,保留最近的100个版本。当用户浏览帖子时,就向rlog表中插入一条记录,形式如下: 

hbase> put ¨rlog¨,$userid,¨article:id¨,$aid 

这里仅选择记录浏览的用户ID和浏览页面ID,也可以根据实际情况,保存页面的URL地址,文章标题等等信息。HBase表列族是非结构化的,大家可以根据需求任意增加列值。

那么,要获取用户最近浏览记录,应该怎么查呢?,比如说获取最近浏览的10条记录: