1.问题描述
1.1初始数据
get 'test:xixi','01'
1.2指定版本号添加数据
指定比之前版本小的时间戳进行添加数据
public static void putData() throws IOException {Table table = connection.getTable(TableName.valueOf("test", "xixi"));Put put = new Put(Bytes.toBytes("01"),1000L);put.addColumn(Bytes.toBytes("desc"),Bytes.toBytes("name"),Bytes.toBytes("w5")).setTimestamp(100L);table.put(put1);table.close();connection.close();}
查询的结果居然是最新的,为什么指定时间戳会失效?
2.解决
在用Java Api对单个字段设定时间戳时,会存在一个问题
在这里addCloumn()之后设置时间戳,会给下一个字段设置时间戳版本而不是给当前字段设置
Put put = new Put(Bytes.toBytes("01"));put.addColumn(Bytes.toBytes("desc"),Bytes.toBytes("name"),Bytes.toBytes("ls")).setTimestamp(1000L)
Debug

每次都会创建一个KeyValue,会把Put的成员变量ts传入
所以需要更改成这样
put.setTimestamp(1000L).addColumn(Bytes.toBytes("desc"),Bytes.toBytes("name"),Bytes.toBytes("ls"))
或者想对本行都生效,可以在构造器中设置
Put put = new Put(Bytes.toBytes("01"),1000L);
