开发者学堂课程【分布式数据库 HBase 快速入门:添加数据】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/101/detail/1750
添加数据
内容简介:
1.表的操作
2.添加数据
3.旧 API 换成新 API
4.测试
5.批量插入数据
1.表的操作
1)创建表
hbase (main):002:0> create ' student', ' info'
2)插入数据到表
hbase (main):003:0> put 'student', '1001' , ' info:sex', 'male'
hbase (main):004:0> put 'student', '1001', ' info:age', '18'
hbase (main):005:0> put 'student','1002', 'info:name', 'Janna'
hbase (main):006:0> put 'student', '1002', 'info:sex' , ' female',
hbase (main):007:0> put 'student', ' 1002', ' info:age', '20'
3)扫描查看表数据
hbase (main) :008:0> scan ' student '
hbase (main) :009:0> scan ' student' , {STARTROW => ' 1001', STOPROW =>' 1001'}
hbase (main) :010:0> scan 'student', {STARTROW => '1001'}
4)查看表结构
hbase (main) :011:0> describe 'student'
5)更新指定字段的数据
hbase (main) :012:0> put 'student', '1001', ' info:name', 'Nick'
hbase (main) :013:0> put ' student', '1001' , ' info:age', '100'
2.添加数据
当命令行操作,在 put 数据的时候,要有表名、rowKey、列族、列名和族值。插入数据和命令行的操作一样,要有这些数据:
Public static void putData(String tableName,String rowKey,String cf,String cn,String value){
}
对于表操作其实拿的是具体的某张表,即操作的是一张表,那么应该创建的是表对象。刚才操作的是整张表,拿的 是 Hbase 的管理员对象,现在应该获取 Table 对象,但它是一个接口。
点到接口里面,可以看到它只有一个实现类。
其实用到的是 HTable,下面创建 HTable。
第三条,要一个配置文件,要一个表名,这里先用过时的,不过时的调用方法太复杂了,之后再通过过时 API 来找新 API。TableName 上面已经有了,配置文件不能放在静态代码块里面,要把它拿出来。
1)获取表对象
HTable table = new HTable (configuration, TableName. valueOf(tableName));
插入数据应该调用的是 put 方法。
put 两个方法,即插入数据可以一条一条的插入,也可以批量插入。当前只插入一条数据,用 table.put()
2)创建 put 对象
第一个方法要 byte 数组型的 row,这个 row 指的是 rowKey。Hbase 有自己的工具类,这个工具类是 Bytes
(org. apache. hadoop. hbase. util),Hbase 提供的字节数组跟其他类型之间的互相转化的工具类。现在是要将 String 转成 byte 数组,
Put put = new Put (Bytes. toBytes(rowKey));
3)添加数据
对于 1001 这个 rowKey 可以放多条数据,其实这些值是在 put 对象里面放着,而且你能通过它是一个 rowKey 对应一个 put。
接下来往 put 里面放数据:
put. addColumn (Bytes. toBytes(cf), Bytes. toBytes(cn) , Bytes. toBytes(value));
4)执行添加操作
Table.put (put)
5)具体程序代码
3.旧API换成新API
要用 collection 来获取 table,下面有 getTable()方法来获取 table 对象:
Table table = connection. getTable (TableName. valueOf(tableName));
4.测试
先扫描一下这张表。
发现里面没有 1003,那么传入 1003,测试代码。
再次扫描这张表。
发现里面有 1003 了。
5.批量插入数据
批量插入分为两种情况,table.put(put),里面不仅可以放入 put,还可以放入 put的集合。
如果放入的是 put 的集合,那么这种批量插入的数据肯定对应多个 rowKey,因为一个 put 对象就是一个 rowKey,它们是一一对应的关系,但 rowKey 将会有多个。
这种批量插入就是 ck 和 value 有多个。
这种批量插入指的是同一个 rowKey,不同的列里面的数据。
还有一种是将 put、list 的集合来做批量插入,这种方法比较麻烦,因为它要将rowKey、cf、cn、value一一对应起来。要用到 map 集合:第一个 map 集合把 cn和 value 绑定起来,第二个 map 集合来绑定 cf 加上第一个 map 集合。这样就把cf、cn 加 value 对应起来了,第三个 map 集合把 rowKey 和第二个 map 集合连起来了,嵌套了多层非常麻烦。
生产当中是来一条数据封装一个 put 对象,然后判断 list 集合,list 集合条数达到多少条之后再统一的核对一下。