Table接口:负责表数据的基本操作。
Admin类:负责管理建表、删表、该表等元数据操作的接口。
++1、Put++ ++方法++
1.1、了解put方法之前,必须知道的相关知识。
- 在HBase中有一个理念:所有的数据皆为bytes。因此在HBase中所有的数据最终都会被序列化为bytes[ ]保存。
- 最简单的将字符串转化为bytes[ ]的方法为:Bytes.toBytes()。
1.2、Put方法的构造函数
Put(bytes[ ] row)
Put(ByteBuffer row)
Put(Put putToCopy)
Put(bytes[ ] row , long ts) 等等;
1.3、addColumn方法常用到调用方式
addColumn(byte[ ] family , byte[ ] qualifier , byte[ ] value)
addColumn(byte[ ] family , byte[ ] qualifier , long ts , byte[ ] value)
addColumn(byte[ ] family , ByteBuffer qualifier , long ts , ByteBuffer value)
注:Put提供了一个语法糖,每一个addColumn返回的都是Put对象自己,因此可以把所有的列添加方法连接起来写。
以下为测试代码:
java
public static void main(String[] args) throws IOException {
//1.实例化配置文件对象
Configuration configuration = HBaseConfiguration.create();
//2.设置连接接的数据库的IP地址
configuration.set("hbase.zookeeper.quorum","master");
//3.创建连接对象
Connection connection = ConnectionFactory.createConnection(configuration);
//4.创建Table接口对象
Table table = connection.getTable(TableName.valueOf("user"));
//实例化Put对象
Put put = new Put(Bytes.toBytes("row1"));
//5.准备新增的数据
put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),666,Bytes.toBytes("jack"))
.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"),Bytes.toBytes("23"))
.addColumn(Bytes.toBytes("info"),Bytes.toBytes("address"),Bytes.toBytes("河南开封"));
//6.执行新增操作
table.put(put);
//7.控制台打印运行完毕标识语句
System.out.println("新增数据执行完毕~");
}
1.4、Put对象中其他方法
append方法 用于追加字符;increment方法 用于数值增加或增减(前提:该数据为long格式的)
++2、Get++ ++方法++
2.1、Get的构造函数
Get get = new Get(byte[ ] row)
2.2、Get对象相关方法
为了提高查询效率。
addFamily(byte[ ] family) 添加要取出来的列族
addColumn(byte[ ] family , byte[ ] qualifier)添加要取出来的列族和列
setTimeRange(long minStramp , long maxStramp)设置要取出的版本范围
setMaxVersions()设置要取出的版本数,默认为1,不传入参数直接调用就是把MaxVersions设置为Integer.MAV_VEALUE。
2.3、Result类
byte value()把查询结果的第1列提取出来的快捷写法,用于你只查了一个列的情况。
boolean isEmpty()查询结果是否为空,可以用来判断是否查询到数据。
Int size()返回查找到的列数量,也可以提供size是否大于0判断是否查询到数据
以下为测试代码案例:
java
public static void main(String[] args) throws IOException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","master");
Connection connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("user"));
Get get = new Get(Bytes.toBytes ("row1"));
Result result = table.get(get);
System.out.println(Bytes.toString(result.value()));
System.out.println("判断查询结果是否为空:"+result.isEmpty());
System.out.println("查找到的列数为:"+result.size());
System.exit(-1);
}
3、exists 方法
Table接口提供的exists方法用来快速查询某一个数据是否存在的。
4、delet 方法
4.1、Delete对象构造器
Delete delete = new Delete(byte[ ] row);
4.2、Delete对象相关方法
addFamily(byte[ ] family) 删除指定列族
addFamily(byte[ ] family , long timestamp) 删除指定列族中所以版本号等于或小于给定的版本号的列
addColumn(byte[ ] family , byte[ ] qualifiler) 删除指定列的最新版本
addColumn(byte[ ] family , byte[ ] qualifiler , long timestamp) 删除指定列的特定版本
addColumns(byte[ ] family , byte[ ] qualifiler) 删除指定列的所有版本
addColumns(byte[ ] family , byte[ ] qualifiler , long timestamp) 删除指定列的等于或小于给定版本号的所有版本。
5、checkAndDelete 方法
Table接口提供的,保证在一个原子操作内对数据完成修改和删除操作。
6、mutation 方法
Table接口提供的,保证在任意两个操作放在他同一个原子操作内。
RowMutations类 用于整合相关操作 作为mutateRow方法的参数。
代码演示如下:
java
public static void main(String[] args) throws IOException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","192.168.28.130");
Connection connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("user"));
//1.删除 行:row3 列: age
Delete delete = new Delete(Bytes.toBytes("row3"));
delete.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"));
//2.修改 name值为chris
Put put1 = new Put(Bytes.toBytes("row3"));
put1.addColumn(Bytes.toBytes("info"),Bytes.toBytes("name"),Bytes.toBytes("chris"));
//3.新增 info:job值为engineer
Put put2 = new Put(Bytes.toBytes("row3"));
put2.addColumn(Bytes.toBytes("info"),Bytes.toBytes("job"),Bytes.toBytes("engineer"));
//新建RowMutations类 并且把以上操作对象添加进去
RowMutations rowMutations = new RowMutations(Bytes.toBytes("row3"));
rowMutations.add(delete);
rowMutations.add(put1);
rowMutations.add(put2);
//执行删除/修改/新增操作
table.mutateRow(rowMutations);
System.out.println("执行完毕~");
}
7.批量操作
bath方法
java
public static void main(String[] args) throws IOException, InterruptedException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","master");
Connection connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("user"));
//1.查询行row2数据
Get get = new Get(Bytes.toBytes("row2"));
//2.新增数据 row4 info:age 23
Put put = new Put(Bytes.toBytes("row4"));
put.addColumn(Bytes.toBytes("info"),Bytes.toBytes("age"),Bytes.toBytes(23));
//3.删除行row1数据
Delete delete = new Delete(Bytes.toBytes("row1"));
//4.批量执行操作
ArrayList<Row> list = new ArrayList<Row>();
list.add(get);
list.add(put);
list.add(delete);
Object[] results = new Object[list.size()];
table.batch(list,results);
byte[] value = ((Result) results[0]).getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
System.out.println(Bytes.toString(value));
}
8、Scan 扫描
java
public static void main(String[] args) throws IOException {
Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.quorum","master");
Connection connection = ConnectionFactory.createConnection(configuration);
Table table = connection.getTable(TableName.valueOf("user"));
Scan scan = new Scan(Bytes.toBytes("row2"));
ResultScanner results = table.getScanner(scan);
Result result = results.next();
byte[] value = result.getValue(Bytes.toBytes("info"), Bytes.toBytes("name"));
System.out.println(Bytes.toString(value));
}