29-Hbase-Api-DML:
像表中插入数据
public static void main(String[] args) throws IOException {
//像表中插入数据
putData("stu","1001","info2","name","插入数据01");
//获取数据
getData("stu","1002","info2","");
close();
}
/**
* 像表中插入数据
* @param tableName 表
* @param rowKey 行
* @param columnFamily 列族
* @param column 列
* @param value 值
*/
public static void putData(String tableName,String rowKey,String columnFamily,String column,String value) throws IOException {
//获取表对象
Table table = connection.getTable(TableName.valueOf(tableName));
//创建put对象
Put put = new Put(Bytes.toBytes(rowKey));
//给put赋值
put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(value));
//插入数据
table.put(put);
table.close();
}
获取数据
public static void main(String[] args) throws IOException {
//获取数据
getData("stu","1002","","");
close();
}
//获取数据
public static void getData(String tableName,String rowKey,String columnsFamily,String column) throws IOException {
//获取表对象
Table table = connection.getTable(TableName.valueOf(tableName));
//获取get对象
Get get = new Get(Bytes.toBytes(rowKey));
//指定获取的列族
// get.addFamily(Bytes.toBytes(columnsFamily));
//指定列族和列
// get.addColumn(Bytes.toBytes(columnsFamily),Bytes.toBytes(column));
//设置获取数据的版本数
get.setMaxVersions();
//获取数据
Result result = table.get(get);
//解析result打印
Cell[] cells = result.rawCells();
for (Cell cell : cells) {
//打印数据
System.out.println("cFamily:"+Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("cQualifier:"+Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("cValue:"+Bytes.toString(CellUtil.cloneValue(cell)));
System.out.println("cTimeStamp:"+cell.getTimestamp());
System.out.println("====================================================");
}
//关闭表连接
table.close();
}
获取数据SCAN
public static void main(String[] args) throws IOException {
//scan获取数据
sacnTabel("stu");
close();
}
//获取数据scan
public static void sacnTabel(String tableName) throws IOException {
//获取表对象
Table table = connection.getTable(TableName.valueOf(tableName));
//创建Scan
Scan scan = new Scan();
//Scan scan = new Scan(Bytes.toBytes("1001"),Bytes.toBytes("1003"));
//扫描表
ResultScanner resultScanner = table.getScanner(scan);
//解析resultScanner
for (Result result : resultScanner) {
//解析result并打印
for (Cell cell : result.rawCells()) {
//打印数据
//打印数据
System.out.println("RowKey:"+Bytes.toString(CellUtil.cloneRow(cell))+
", cFamily:"+Bytes.toString(CellUtil.cloneFamily(cell))+
", cQualifier"+Bytes.toString(CellUtil.cloneQualifier(cell))+
", cValue:"+Bytes.toString(CellUtil.cloneValue(cell))+
", cTimeStamp:"+cell.getTimestamp());
System.out.println("====================================================");
}
}
//关闭表连接
table.close();
}
删除数据
hbase(main):012:0> delete 'stu','1002','info2'
0 row(s) in 0.1210 seconds
hbase(main):015:0> deleteall 'stu','1002'
0 row(s) in 0.0220 seconds
hbase(main):017:0> scan 'stu',{RAW=>TRUE,VERSIONS=>5}
ROW COLUMN+CELL
1001 column=info2:name, timestamp=1619232415727, value=\xE6\x8F
\x92\xE5\x85\xA5\xE6\x95\xB0\xE6\x8D\xAE01
##### 1002 column=info1:, timestamp=1619266435037, type=DeleteFamily
1002 column=info1:ddr, timestamp=1619233375653, value=xianzhong
lou
1002 column=info1:name, timestamp=1619233438453, value=name01
1002 column=info1:phone, timestamp=1619233467798, value=1520000
8888
1002 column=info2:, timestamp=1619266435037, type=DeleteFamily
##### 1002 column=info2:, timestamp=1619266365328, type=DeleteColumn
1005 column=info1:name, timestamp=1618239079257, value=lisi
1005 column=info1:name, timestamp=1618239054974, value=zhangsan
3 row(s) in 0.2820 seconds
public static void main(String[] args) throws IOException {
deleteData("stu","1008","info1","name");
//deleteData("stu","10001","info1","");//删除列族
close();
}
//删除数据
public static void deleteData(String tableName,String rowkey,String columnsFamily,String columns) throws IOException {
//获取table对象
Table table = connection.getTable(TableName.valueOf(tableName));
//构建删除delete对象
Delete delete = new Delete(Bytes.toBytes(rowkey));
//设置删除的列
delete.addColumns(Bytes.toBytes(columnsFamily),Bytes.toBytes(columns));//时间戳删除指定的
//delete.addColumn(Bytes.toBytes(columnsFamily),Bytes.toBytes(columns));//甚用,删除最大版本,旧版本复活。对客户端显示上一个版本
//删除指定的列族
delete.addFamily(Bytes.toBytes(columnsFamily));
//执行删除操作
table.delete(delete);
//关闭连接
table.close();
}
注释:如果加入时间戳,时间戳比表中最大的数据的时间戳还大,不会删除表中的数据。只删除对应的时间戳的那一条数据
delete删除全部列族截图
//删除指定的列族delete.addFamily(Bytes.toBytes(columnsFamily));
deleteData("stu","10001","info1","");
删除扩展
delete其实时put。put一条数据标记。(自己源码查看)