Hbase 客户端 API 系列(二) - Delete 操作 时间: 2018-10-26 18:04 分类: hadoop 现有如下表数据: rowkey baseinfo isbn publisher name price book:1 11111111 人民出版社 计算机组成原理 25 我们需要做的就是通过客户端 API 删除这一行数据。 很简单,`HTable`类给我们提供了`delete()`方法来进行删除,它有两个重写的方法: - public void delete(final Delete delete) throws IOException - public void delete(List deletes) throws IOException 也就是单一删除和批量删除。 由于比较简单,这里我就只演示单一删除了: ```java public class DeleteTest { public static void main(String[] args) throws IOException { Configuration conf = HBaseConfiguration.create(); Connection conn = ConnectionFactory.createConnection(conf); HTable table = (HTable) conn.getTable(TableName.valueOf("tb_test")); Put put = new Put(Bytes.toBytes("book:1")); put.addColumn(Bytes.toBytes("baseinfo"), Bytes.toBytes("isbn"), Bytes.toBytes("11111111")); put.addColumn(Bytes.toBytes("baseinfo"), Bytes.toBytes("publisher"), Bytes.toBytes("人民出版社")); put.addColumn(Bytes.toBytes("baseinfo"), Bytes.toBytes("name"), Bytes.toBytes("计算机组成原理")); put.addColumn(Bytes.toBytes("baseinfo"), Bytes.toBytes("price"), Bytes.toBytes("25")); table.put(put); show(table, "book:1"); table.delete(new Delete(Bytes.toBytes("book:1"))); show(table, "book:1"); table.close(); conn.close(); } public static void show(HTable table, String rowKey) throws IOException { Get get = new Get(Bytes.toBytes(rowKey)); Result rs = table.get(get); if (rs.isEmpty()) { System.out.println("无此数据!"); } for (Cell cell : rs.rawCells()) { System.out.println("列簇:" + Bytes.toString(CellUtil.cloneFamily(cell)) + "\t" + "列修饰符:" + Bytes.toString(CellUtil.cloneQualifier(cell)) + "\t" + "列值:" + Bytes.toString(CellUtil.cloneValue(cell)) + "\t" + "时间戳:" + cell.getTimestamp()); } System.out.println(); } } ``` 运行结果: ``` 列簇:baseinfo 列修饰符:isbn 列值:11111111 时间戳:1540542478290 列簇:baseinfo 列修饰符:name 列值:计算机组成原理 时间戳:1540542478290 列簇:baseinfo 列修饰符:price 列值:25 时间戳:1540542478290 列簇:baseinfo 列修饰符:publisher 列值:人民出版社 时间戳:1540542478290 无此数据! ``` 可以看到,`delete()`方法我们传入了一个`Delete`对象,新建`Delete`对象的时候我们传入了一个参数,这个参数也就是数据的`rowkey`行键。 然后我们直接执行`delete()`方法,删除成功! 继续观察`Delete`类有哪些方法,以下列举了一些常用的: 1. public Delete add(Cell cell) throws IOException 2. public Delete addFamily(byte[] family) 3. public Delete addFamily(byte[] family, long timestamp) 4. public Delete addFamilyVersion(byte[] family, long timestamp) 5. public Delete addColumns(byte[] family, byte[] qualifier) 6. public Delete addColumns(byte[] family, byte[] qualifier, long timestamp) 7. public Delete addColumn(byte[] family, byte[] qualifier) 8. public Delete addColumn(byte[] family, byte[] qualifier, long timestamp) 第一个方法: 指定要删除的单元格位置,一个`Cell`对应一个单元格。 第二个方法: 删除某个列簇下所有版本的所有列。 第三个方法: 删除某个列簇下所有小于等于timestamp版本的所有列。 第四个方法: 删除某个列簇下等于timestamp版本的所有列(注意和上一个方法的区别)。 第五个方法: 删除某一列所有版本的值。 第六个方法: 删除某一列所有小于等于timestamp版本的值。 第七个方法: 删除某一列最后一个版本的值(注意和addColumns的区别,addColumn都是只能删除某个版本的列的值,而addColumns删除的是某列所有版本的值或者小于等于某个版本的值,下同)。 第八个方法: 删除某一列所有等于timestamp版本的值。 上面的 8 个方法就不一一试验了,有兴趣的可以试一下。 上面代码中直接传入`Delete`对象,没有调用任何上面的方法,删除的是`rowkey`的所有列。 标签: hbase