package dashuju19.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CompareOperator;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;
import java.io.IOException;
import java.util.List;
public class HbaseJavaScan {
public static void main(String[] args) throws IOException {
Admin admin = getAdmin();
// 查询6月份的数据
queryDate(admin.getConnection(), "WATER_BILL","C1","RECORD_DATE",
"2020-06-01","2020-06-30");
//关闭admin
admin.close();
}
public static Admin getAdmin() {
//1.创建hbase的配置
Configuration configuration = HBaseConfiguration.create();
//2.创建hbase的连接
Connection connection = null;
Admin admin = null;
try {
//通过工厂模式,根据配置创造连接
connection = ConnectionFactory.createConnection(configuration);
System.out.println(connection);
//3.创建admin对象
admin = connection.getAdmin();
} catch (IOException e) {
e.printStackTrace();
}
return admin;
}
/**
* @description: 查询某列某个日期范围的数据
* @param connection
* @param tablename
* @param columnFamily
* @param column
* @param startValue
* @param endValue
* @throws IOException
*/
public static void queryDate(Connection connection, String tablename, String columnFamily,String column,String startValue,String endValue) throws IOException {
// 1.获取Htable
Table table = connection.getTable(TableName.valueOf(tablename));
// 2.构建scan对象
Scan scan = new Scan();
// 3.构建2个过滤器
// 3.1 构建日期范围过滤器
// 构建开始日期过滤器
SingleColumnValueFilter startDateFilter = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),Bytes.toBytes(column),
CompareOperator.GREATER_OR_EQUAL,Bytes.toBytes(startValue));
// 构建结束日期过滤器
SingleColumnValueFilter endDateFilter = new SingleColumnValueFilter(Bytes.toBytes(columnFamily),Bytes.toBytes(column),
CompareOperator.LESS_OR_EQUAL,Bytes.toBytes(endValue));
// 3.2 构建过滤器列表
FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL,startDateFilter,endDateFilter);
// 4.构建扫描器
scan.setFilter(filterList);
// 5.执行scan扫描操作
ResultScanner resultScanner = table.getScanner(scan);
// 6.迭代打印result
for (Result result:resultScanner) {
// 6.1 打印rowkey
System.out.println("rowkey=>" + Bytes.toString(result.getRow()));
System.out.println("-------------------------------------------------");
// 6.2 迭代单元格列表
List<Cell> cells = result.listCells();
for (Cell cell:cells) {
// 6.3 打印数据
// 打印列簇名
System.out.print(Bytes.toString(cell.getFamilyArray(),cell.getFamilyOffset(),cell.getFamilyLength()));
//打印列名
//System.out.print(":"+Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength()));
//解决数值型数据乱码的问题
String columName = Bytes.toString(cell.getQualifierArray(),cell.getQualifierOffset(),cell.getQualifierLength());
System.out.print(":"+columName);
//判断是否为数值型列
if (columName.equals("NUM_CURRENT")||columName.equals("NUM_PREVIOUS")||columName.equals("NUM_USAGE")||columName.equals("TOTAL_MONEY")){
//打印数值型的值
System.out.println("=>"+Bytes.toDouble(cell.getValueArray(),cell.getValueOffset()));
}else {
//打印字符型的值
System.out.println("=>" + Bytes.toString(cell.getValueArray(),cell.getValueOffset(),cell.getValueLength()));
}
}
System.out.println("------------------------------------------------");
}
// 关闭资源
resultScanner.close();
table.close();
}
}
Hbase的JavaAPI
需积分: 5 145 浏览量
2022-04-27
18:59:56
上传
评论
收藏 27KB RAR 举报
平平无奇秃头小天才
- 粉丝: 118
- 资源: 4
评论0