Hbase-scan

package com.cnnc.HbaseTest;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @auther:wangxiaodong
 * @date:2019/11/7
 * @description:scanHbaseData
 * @version:1.0
 */
public class ScanDemo {
    private static final String Table = "s_behavior";
    private static final String CF_PC = "pc";
    private static final String CF_PHONE = "ph";
    private static final String COLUMN_VIEW = "v";
    private static final String COLUMN_ORDER = "o";
    private static final long userId = 12345 ;
    private static final String MIN_TIME = String.format("%0"+19+"d",0);
    private static final String MAX_TIME = String.format("%9"+19+"d",9);
    private static RowKeyUtil rowKeyUtil = new RowKeyUtil();

    public static void main(String args[]) throws ParseException, IOException {
        Scan scan = new Scan();
//        设置浏览的列族
        scan.addFamily(CF_PC.getBytes());
//        设置浏览的数据列
        scan.addColumn(CF_PHONE.getBytes(),COLUMN_ORDER.getBytes());
//       如果查找的数据量在64K(一个block以下),建议开启此设置
        scan.setSmall(true);
//        设置起始的RowKey,结果包含开始行
        scan.setStartRow(Bytes.toBytes(userId+"_1"));
//         设置截止的Rowkey,结果不包含结束行
        scan.setStopRow(Bytes.toBytes(userId+"_2"));
//        设置scan的时间范围为2018.1.1到现在
        String starts = "2018-01-01";
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date startdate = dateFormat.parse(starts);
        scan.setTimeRange(startdate.getTime(),System.currentTimeMillis());
//        设置Scan的数据版本为2
        scan.setMaxVersions(2);
//        设置数据是否缓存读取的数据块,如果数据会被多次读取则应该设置为true,如果数据金会被读取一次则设置为false
        scan.setCacheBlocks(false);
//          根据TableName获取表对象
        Table table = HbaseConnectFactory.getConnection().getTable(TableName.valueOf(Table));
//          获取ResultScanner
        ResultScanner resultScanner = table.getScanner(scan);

        Result result = null;

        while ((result = resultScanner.next())!=null){
            if(result.getRow()==null){
                continue;
            }
            Cell[] cells = result.rawCells();
            System.out.println("rowkey="+Bytes.toString(result.getRow()));
            for(Cell cell:cells){
//                使用工具类CellUtil,将Qualifier,Value,Family的值拷贝
                String qualifier = Bytes.toString(CellUtil.cloneQualifier(cell));
                String value = Bytes.toString(CellUtil.cloneValue(cell));
                String family = Bytes.toString(CellUtil.cloneFamily(cell));
                System.out.println("family="+family+",qualifier="+qualifier+",value="+value);
            }

        }
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值