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);
}
}
}
}
Hbase-scan
最新推荐文章于 2020-01-14 11:10:21 发布