删除API详解
2021-03-06 19:30
标签:process 对象 strong http 详解 代码 ati new 区别 javaAPI删除Hbase的数据有三种方式,hbase删除数据,并不是马上删掉,只是对数据打一个删除标记,真正删除数据是等到下一次major_compact(除非KEEP_DELETED_CELLS=true)。 1) 删除指定的rowkey下的所有数据 当采用只指定rowkey的时候,main测试指定rowkey为“000002” 在Hbase中执行 扫描表发现rowkey为“00002”的数据已经成功删除,并且查看到标记是 type=DeleteFamily 2)删除指定删除指定的列族 使用 看到刚才能显示的数据都被打上标签DeleteFamily 3) 删除指定的列 delete.addColumn()或者delete.addColumns(),这两个方法有什么区别呢?查看源码: 所以如果addColumn()传参没有时间戳的最终就会删除最新的时间戳的那个版本的数据,如果传参有时间戳的话就会删除指定时间戳的版本的数据 2.addColumns() 如果传入的参数有时间戳,就给删除小于等于这个时间戳之前版本的数据;如果没有传入参数时间戳,就给删除所有的版本的数据 3.测试 使用delete.addColumn()设置删除对象; 使用delete.addColumns()设置删除对象; 删除API详解 标签:process 对象 strong http 详解 代码 ati new 区别 原文地址:https://www.cnblogs.com/zqzhen/p/12844668.htmlHbase--API删除数据详解
一:代码实现如下:
public classTestHbaseConnect {
private static Configuration config=null;//配置文件对象
private static Connection connection=null;//连接对象
private static Admin admin=null;//管理员对象,对表的相关操作
static {
try {
//1.获取hbase的配置文件对象
config=HBaseConfiguration.create();
config.set("hbase.zookeeper.quorum",
//2.获取管理员对象
//HBaseAdmin admin=new HBaseAdmin(conf);
connection=ConnectionFactory.createConnection(config);
//3.创建管理员admin对象
admin=connection.getAdmin();
} catch (Exception e) {
// TODO: handle exception
}
}
public static void main(String[] args) throws MasterNotRunningException, ZooKeeperConnectionException, IOException {
deleteData("HbaseAPI:HbaseAPI01", "000001", "info02", "name");
}
/**
* 8.删除数据
*/
public static void deleteData(String tableName,String rowkey,String family,String qualifier) throws IOException {
//1.获取表对象
Table table=connection.getTable(TableName.valueOf(tableName));//
//2.构建删除对象
Delete delete=newDelete(Bytes.toBytes(rowkey));
//2.1设置删除的列
//delete.addColumn(family, qualifier);//如果传入的参数有时间戳,就给指定时间戳的版本打上删除标记;否则,只删除最新的版本
//delete.addColumns(Bytes.toBytes(family),Bytes.toBytes(qualifier));//如果传入的参数有时间戳,就给删除小于等于这个时间戳之前版本打上删除标记的内容;如果没有传入参数时间戳,就给删除所有的版本打上删除标记
//2.2删除指定的列族
delete.addFamily(Bytes.toBytes(family));
//3.执行删除操作
table.delete(delete);
//4.关闭表连接
table.close();
}
/**
* 关闭资源和连接
* @throws IOException
*/
public static void close() throws IOException {
//关闭连接
if (admin!=null) {
admin.close();
}
if (connection!=null) {
connection.close();
}
}
}
二:分析和实践
deleteData("HbaseAPI:HbaseAPI01", "000001","info02","name");
scan “HbaseAPI:HbaseAPI01”,{RAW=>TRUE,VERSION=>10};
DeleteFamily:表示是一个一个列族删除的,并不是直接删除rowkey="000002"的所有数据
删除指定的列族需要在通过rowkey构建删除对象delete之后,delete调用方法delete.addFamily(Bytes.toBytes(family))
scan "HbaseAPI:HbaseAPI01"
已经没有返回数据了,但是执行scan “HbaseAPI:HbaseAPI01”,{RAW=>TRUE,VERSION=>10};
public static void deleteData(String tableName,String rowkey,String family,String qualifier) throws IOException {
//1.获取表对象
Table table=connection.getTable(TableName.valueOf(tableName));//
//2.构建删除对象
Delete delete=newDelete(Bytes.toBytes(rowkey));
//2.1设置删除的列
//delete.addColumn(Bytes.toBytes(family),Bytes.toBytes(qualifier));
//delete.addColumns(Bytes.toBytes(family),Bytes.toBytes(qualifier));
//2.2删除指定的列族
//delete.addFamily(Bytes.toBytes(family));
//3.执行删除操作
table.delete(delete);
//4.关闭表连接
table.close();
}
删除指定的列族需要在通过rowkey构建删除对象delete之后,delete调用方法
1.addColumn()addColumn(family, qualifier)#参数没有传入时间戳
在Hbase中执行scan “HbaseAPI:HbaseAPI01”,{RAW=>TRUE,VERSION=>10};
扫描表发现数据已经成功删除,并且查看到标记是 type=Delete:表示是删除精确到一条数据,这个是特殊的,假如有多个版本的数据,只会删除最新的,删除最新的之后旧的版本就又会显示出来;
扫描表发现数据已经成功删除,并且查看到标记是type=DeleteColumn;