• Hbase之取出行数据指定部分+版本控制(类似MySQL的Limit)


    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
    -----
     **/
    
  • 相关阅读:
    2019-10-14-云之幻-UWP-视频教程
    2019-10-14-云之幻-UWP-视频教程
    2018-2-13-win10-uwp-自定义控件-SplitViewItem
    2018-2-13-win10-uwp-自定义控件-SplitViewItem
    2019-9-19-dotnet-找不到-PostAsJsonAsync-方法
    2019-9-19-dotnet-找不到-PostAsJsonAsync-方法
    2018-5-28-WPF-Process.Start-出现-Win32Exception-异常
    2018-5-28-WPF-Process.Start-出现-Win32Exception-异常
    Java实现 LeetCode 606 根据二叉树创建字符串(遍历树)
    Java实现 LeetCode 606 根据二叉树创建字符串(遍历树)
  • 原文地址:https://www.cnblogs.com/similarface/p/5795309.html
Copyright © 2020-2023  润新知