如何获取HBase表中特定版本的行数据?
获取HBase表中特定版本的行
首先,先纠正一个小细节:你在put语句里使用{VERSIONS=>1}是不正确的哦——VERSIONS是建表时列族的属性,用来设置该列族保留的最大版本数;而要在插入时区分不同版本,应该用TIMESTAMP参数(如果不指定,HBase会自动生成当前时间戳作为版本标识)。比如正确的插入语句应该是:
// 插入版本1(指定时间戳,比如1600000000000) put 'mytable', 'row1', 'cf1:lang','english', 1600000000000 // 插入版本2(指定更大的时间戳,比如1600000001000) put 'mytable', 'row1', 'cf1:lang', 'spanish', 1600000001000
接下来,针对你的需求,有两种常用方法获取值为english的旧版本行:
方法1:获取该列的所有版本,直接查看旧版本
如果你不确定旧版本的时间戳,可以直接指定获取该列的所有保留版本(你的表设置了VERSIONS=>2,所以最多返回2个版本):
get 'mytable', 'row1', {COLUMN => 'cf1:lang', VERSIONS => 2}
执行后会返回该列的所有版本数据,你就能看到包含english的那一行,输出类似:
COLUMN CELL cf1:lang timestamp=1600000000000, value=english cf1:lang timestamp=1600000001000, value=spanish
方法2:指定旧版本的时间戳精准获取
如果你已经知道english对应的版本时间戳(可以通过方法1的结果拿到),可以直接通过TIMESTAMP参数精准获取该版本:
get 'mytable', 'row1', {COLUMN => 'cf1:lang', TIMESTAMP => 1600000000000}
这样就会直接返回时间戳对应的english值。
另外,如果你想获取某个时间点之前的版本,还可以用TIME_RANGE参数,比如获取时间戳小于1600000001000的版本:
get 'mytable', 'row1', {COLUMN => 'cf1:lang', TIME_RANGE => [0, 1600000001000]}
内容的提问来源于stack exchange,提问作者Bala
相关产品推荐
相关产品推荐

