大数据技术之HBase原理与实战归纳分享-中( 五 )

封装DML读写数据类HBaseDML.java
package cn.itxs.hbasedemo;import org.apache.hadoop.hbase.Cell;import org.apache.hadoop.hbase.CellUtil;import org.apache.hadoop.hbase.CompareOperator;import org.apache.hadoop.hbase.TableName;import org.apache.hadoop.hbase.client.*;import org.apache.hadoop.hbase.filter.ColumnValueFilter;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;public class HBaseDML {//添加静态属性connection指向单例属性public static Connection connection = HBaseConnection.connection;/*** 插入数据* @param namespace 命名空间名称* @param tableName 表名称* @param rowKye 主键,* @param columnFamily 列族* @param columnName 列名* @param value 值*/public static void putCell(String namespace,String tableName,String rowKye,String columnFamily,String columnName,String value) throws IOException {//获取tableTable table = connection.getTable(TableName.valueOf(namespace, tableName));//2,调用相关的方法往里面插入数据//创建put对象Put put = new Put(Bytes.toBytes(rowKye));//3,添加属性put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName),Bytes.toBytes(value));//4.添加对象将对象写入相关的方法try {table.put(put);} catch (IOException e) {throw new RuntimeException(e);}table.close();}/*** 读取数据 读取对应的一行中的某一列* @param namespace 命名空间名称* @param tableName 表名称* @param rowKye 主键* @param columnFamily 列族* @param columnName 列名*/public static void getCells(String namespace,String tableName,String rowKye,String columnFamily,String columnName) throws IOException {//获取tableTable table = connection.getTable(TableName.valueOf(namespace, tableName));//2.创建get的对象Get get = new Get(Bytes.toBytes(rowKye));//如果现在调用get方法读取数据,此时读一整行数据get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));//设置读取数据的版本get.readAllVersions();//读取数据得到result对象Result result = null;try {result = table.get(get);} catch (IOException e) {throw new RuntimeException(e);}//处理数据///1测试方法:直接把读取的数据打印到空制台//||如果是实际开发需要再额外写方法对应处理数据Cell[] cells = result.rawCells();for (Cell cell : cells) {//ce11存储数据比较底层String value = https://www.huyubaike.com/biancheng/new String(CellUtil.cloneValue(cell));System.out.println(value);}//关闭table.close();}/*** 扫描数据* @param namespace 命名空间名称* @param tableName 表格名称* @param startRow 开始的row* @param stopRow 结束的Row 左闭右开*/public static void scanRows(String namespace,String tableName,String startRow,String stopRow) throws IOException {//获取tableTable table = connection.getTable(TableName.valueOf(namespace, tableName));//2.创建scan 对象Scan scan = new Scan();//如果此时直接调用,会直接扫描整张表//添加参数 来控制扫描的数据scan.withStartRow(Bytes.toBytes(startRow));scan.withStopRow(Bytes.toBytes(stopRow));//读取多行数据 获得scannerResultScanner scanner = null;try {scanner = table.getScanner(scan);} catch (IOException e) {throw new RuntimeException(e);}//ResultScanner来记录多行 result的数组for (Result result : scanner) {Cell[] cells = result.rawCells();for (Cell cell : cells) {System.out.print(new String(CellUtil.cloneRow(cell))+"---"+new String(CellUtil.cloneFamily(cell))+"---"+new String(CellUtil.cloneQualifier(cell))+"---"+new String(CellUtil.cloneValue(cell))+"\t");}System.out.println();}table.close();}/*** 带过滤的扫描* @param namespace 命名空间名称* @param tableName 表名称* @param startRow 开始row* @param stopRow 结束row* @param columnFamily 列族* @param columnName 列名* @param value 值* @throws IOException 异常*/public static void filterScan(String namespace,String tableName,String startRow,String stopRow,String columnFamily,String columnName,String value) throws IOException {//获取tableTable table = connection.getTable(TableName.valueOf(namespace, tableName));//2.创建scan 对象Scan scan = new Scan();//如果此时直接调用,会直接扫描整张表//添加参数 来控制扫描的数据scan.withStartRow(Bytes.toBytes(startRow));scan.withStopRow(Bytes.toBytes(stopRow));//------>>>>>>//可以添加多个过滤FilterList filterList = new FilterList();//创建过滤器//(1)结果值保留当前列的数据ColumnValueFilter columnValueFilter = new ColumnValueFilter(//列族名称Bytes.toBytes(columnFamily),//列名Bytes.toBytes(columnName),// 比较关系CompareOperator.EQUAL,// 值Bytes.toBytes(value));//(2)结果保留整行数据SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(//列族名称Bytes.toBytes(columnFamily),//列名Bytes.toBytes(columnName),// 比较关系CompareOperator.EQUAL,// 值Bytes.toBytes(value));//filterList.addFilter(columnValueFilter);filterList.addFilter(singleColumnValueFilter);//添加过滤scan.setFilter(filterList);//读取多行数据 获得scannerResultScanner scanner = null;try {scanner = table.getScanner(scan);} catch (IOException e) {throw new RuntimeException(e);}//ResultScanner来记录多行 result的数组for (Result result : scanner) {Cell[] cells = result.rawCells();for (Cell cell : cells) {System.out.print(new String(CellUtil.cloneRow(cell))+"---"+new String(CellUtil.cloneFamily(cell))+"---"+new String(CellUtil.cloneQualifier(cell))+"---"+new String(CellUtil.cloneValue(cell))+"\t");}System.out.println();}table.close();}/*** 删除一行中的一列数据* @param namespace 命名空间名称* @param tableName 表格名字* @param rowKey 主键* @param columnFamily 列族* @param columnName 列名*/public static void deleteColumn(String namespace,String tableName,String rowKey,String columnFamily,String columnName) throws IOException {//获取tableTable table = connection.getTable(TableName.valueOf(namespace, tableName));//创建delete对象Delete delete = new Delete(Bytes.toBytes(rowKey));//添加列信息//addColumn删除一个版本的数据//addColumns删除多个版本的数据delete.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));delete.addColumns(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));try {table.delete(delete);} catch (IOException e) {throw new RuntimeException(e);}//关闭table.close();}}

推荐阅读