import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.CellScanner;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; /**
* Created by similarface on 16/8/22.
* 这儿实现了一个类似于MySQL的Limit的功能 + 版本号控制
*/
public class RetrievesPartsRowWithOffsetLimit2 {
public static void main(String args[]) throws IOException ,InterruptedException {
Configuration configuration = HBaseConfiguration.create();
Connection connection = ConnectionFactory.createConnection(configuration);
//建立表的连接
Table table = connection.getTable(TableName.valueOf("testtable"));
//三个版本的数据
for (int version = 1; version <= 3; version++) {
Put put = new Put(Bytes.toBytes("5702"));
//插入1000个列
for (int n = 1; n <= 1000; n++) {
String num = String.format("%04d", n);
put.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual" + num), Bytes.toBytes("val" + num));
}
System.out.println("Writing version: " + version);
table.put(put);
Thread.currentThread().sleep(1000);
} Get get0 = new Get(Bytes.toBytes("5702"));
get0.addColumn(Bytes.toBytes("colfam1"), Bytes.toBytes("qual0001"));
//获取最大的版本
get0.setMaxVersions();
Result result0 = table.get(get0);
CellScanner scanner0 = result0.cellScanner();
while (scanner0.advance()) {
System.out.println("Get 0 Cell: " + scanner0.current());
} Get get1=new Get(Bytes.toBytes("5702"));
//1-10
get1.setMaxResultsPerColumnFamily(10);
Result result1 = table.get(get1);
CellScanner scanner1 = result1.cellScanner();
while (scanner1.advance()) {
System.out.println("Get 1 Cell: " + scanner1.current());
} Get get2 = new Get(Bytes.toBytes("5702"));
//get2.setMaxResultsPerColumnFamily(10);
//设置版本号 发现最后的结果没有版本区分
get2.setMaxVersions(3);
Result result2 = table.get(get2);
CellScanner scanner2 = result2.cellScanner();
while (scanner2.advance()) {
System.out.println("Get 2 Cell: " + scanner2.current());
}
}
} //get2.setMaxVersions(3); 最后的结果集确没有版本的控制. /**
result:
Writing version: 1
Writing version: 2
Writing version: 3
Get 0 Cell: 5702/colfam1:qual0001/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0001/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0002/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0003/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0004/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0005/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0006/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0007/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0008/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0009/1471844438322/Put/vlen=7/seqid=0
Get 1 Cell: 5702/colfam1:qual0010/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0001/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0002/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0003/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0004/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0005/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0006/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0007/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0008/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0009/1471844438322/Put/vlen=7/seqid=0
Get 2 Cell: 5702/colfam1:qual0010/1471844438322/Put/vlen=7/seqid=0
**/ /**
problem: -----
get2.setMaxVersions(3); 最后的结果集确没有版本的控制. shell存在的:
5702 column=colfam1:qual0999, timestamp=1471844438322, value=val0999
5702 column=colfam1:qual0999, timestamp=1471844437199, value=val0999
5702 column=colfam1:qual0999, timestamp=1471844436037, value=val0999
5702 column=colfam1:qual1000, timestamp=1471844438322, value=val1000
5702 column=colfam1:qual1000, timestamp=1471844437199, value=val1000
5702 column=colfam1:qual1000, timestamp=1471844436037, value=val1000
-----
**/