HBASE中TIMERANGE和VERSION的使用

本文介绍了HBase中如何设置和使用多版本数据,包括在建表时指定版本数及如何查询不同时间戳的历史记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HBase建表中,默认指定的是一个版本(建表时默认的VERSION是1),若要保留多个版本信息,需在创建表时,就要指定版本数。

eg.create 'scores',{NAME=>'course',VERSIONS=>2}

首先,先创建一张表,然后添加两条记录
hbase(main):079:0> create 'scores',{NAME=>'course',VERSIONS=>2}
0 row(s) in 0.9590 seconds
 hbase(main):080:0> put 'scores','Tom','course:math','97'

0 row(s) in 0.0100 seconds

hbase(main):081:0> scan 'scores'
ROW COLUMN+CELL 
Tom column=course:math, timestamp=1394097631387, value=97 

1 row(s) in 0.0190 seconds

hbase(main):082:0> put 'scores','Tom','course:math','100'

0 row(s) in 0.0080 seconds
hbase(main):026:0> scan 'scores'
ROW COLUMN+CELL 
Tom column=course:math, timestamp=1394097651029, value=100 

1 row(s) in 0.0110 seconds

hbase(main):027:0> scan 'scores',{TIMERANGE=>[1394097631387,1394097651029]}
ROW COLUMN+CELL 
Tom column=course:math, timestamp=1394097631387, value=97 
1 row(s) in 0.0210 seconds
hbase(main):028:0> scan 'scores',{TIMERANGE=>[1394097631387,1394097651030]}
ROW COLUMN+CELL 
Tom column=course:math, timestamp=1394097651029, value=100 
1 row(s) in 0.0100 seconds
从上面可以看到,HBASE默认scan出来的结果是最后一条时间戳的记录,那么如何把这两条都scan出来呢,
这时候可以加入VERSIONS这个约束条件:
hbase(main):032:0> scan 'scores',{VERSIONS=>2}
ROW COLUMN+CELL 
Tom column=course:math, timestamp=1394097651029, value=100 
Tom column=course:math, timestamp=1394097631387, value=97 
1 row(s) in 0.0130 seconds
 上面的命令,已经把这条记录都scan出来了。
再看下面的例子:
scan 'scores',{TIMERANGE=>[1394097631386,1394097651029],VERSIONS=>2}
ROW COLUMN+CELL 
 Tom column=course:math, timestamp=1394097631387, value=97 
1 row(s) in 0.0130 seconds
 从上面的结果只scan出一条记录。可知,TIMERANGE表示的是”>=开始时间 and <结束时间“的【左闭右开】。再看:
hbase(main):003:0> scan 'scores',{TIMERANGE=>[1394097631386,1394097651030],VERSIONS=>2}
ROW COLUMN+CELL 
 Tom column=course:math, timestamp=1394097651029, value=100 
 Tom column=course:math, timestamp=1394097631387, value=97 
1 row(s) in 0.0100 seconds
 OK,这样就明白了。
 不过上面的加了VERSIONS=>2,就可以查到历史的数据了,但是必须再创建表的时候加上VERSIONS,否则无效,看下面的例子:
hbase(main):082:0> create 'member','address','info'
0 row(s) in 0.4140 seconds
=> Hbase::Table - member
hbase(main):093:0> put 'member','wanglei','info:age','24'
0 row(s) in 0.0730 seconds
hbase(main):093:1>get 'member','wanglei',{COLUMN=>'info:age'}
COLUMN         CELL 
 info:age timestamp=1394438746187, value=24
hbase(main):093:7> put 'member','wanglei','info:age','99'
0 row(s) in 0.0730 seconds
hbase(main):093:18> get 'member','wanglei',{COLUMN=>'info:age'}
COLUMN                             CELL
info:age                          timestamp=1394439539837, value=100 
hbase(main):022:0> get 'member','wanglei',{COLUMN=>'info:age',TIMERANGE=>[1394438746187,1394439539838],VERSIONS=>2}
COLUMN CELL 
 info:age imestamp=1394439539837, value=100 
1 row(s) in 0.0050 seconds
 可以看到,虽然加了VERSIONS,但get的结果是1条;这就是因为建表时默认的VERSION是1.
修改VERSIONS:
hbase(main):029:0> alter 'member',{NAME=>'info','VERSIONS'=>2}
Updating all regions with the new schema...
0/1 regions updated.
1/1 regions updated.
Done.
0 row(s) in 2.1680 seconds
hbase(main):046:0> put 'member','wanglei','info:age','101'
0 row(s) in 0.0590 seconds
hbase(main):047:0> get 'member','wanglei',{COLUMN=>'info:age'}
COLUMN CELL 
 info:age timestamp=1394441161595, value=101 
1 row(s) in 0.0120 seconds
   那么现在就可以把倆条记录get出来了,如下:
hbase(main):049:0> get 'member','wanglei',{COLUMN=>'info:age',TIMERANGE=>[1394439539837,1394441161596],VERSIONS=>2}或get 'member','wanglei',{COLUMN=>'info:age',VERSIONS=>2}
COLUMN CELL 
 info:age timestamp=1394441161595, value=101 
 info:age timestamp=1394439539837, value=100 
2 row(s) in 0.0080 seconds

转载于:https://my.oschina.net/u/189445/blog/597182

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值