HBase中的CRUD

Table接口:负责表数据的基本操作。

Admin类:负责管理建表、删表、该表等元数据操作的接口。

++1、Put++ ++方法++

1.1、了解put方法之前,必须知道的相关知识。

  1. 在HBase中有一个理念:所有的数据皆为bytes。因此在HBase中所有的数据最终都会被序列化为bytes[ ]保存。
  2. 最简单的将字符串转化为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));
}
相关推荐
技术宝哥1 小时前
Redis(2):Redis + Lua为什么可以实现原子性
数据库·redis·lua
学地理的小胖砸3 小时前
【Python 操作 MySQL 数据库】
数据库·python·mysql
dddaidai1233 小时前
Redis解析
数据库·redis·缓存
数据库幼崽3 小时前
MySQL 8.0 OCP 1Z0-908 121-130题
数据库·mysql·ocp
Amctwd3 小时前
【SQL】如何在 SQL 中统计结构化字符串的特征频率
数据库·sql
betazhou4 小时前
基于Linux环境实现Oracle goldengate远程抽取MySQL同步数据到MySQL
linux·数据库·mysql·oracle·ogg
lyrhhhhhhhh4 小时前
Spring 框架 JDBC 模板技术详解
java·数据库·spring
喝醉的小喵6 小时前
【mysql】并发 Insert 的死锁问题 第二弹
数据库·后端·mysql·死锁
付出不多6 小时前
Linux——mysql主从复制与读写分离
数据库·mysql
初次见面我叫泰隆6 小时前
MySQL——1、数据库基础
数据库·adb