文档简介:
插入数据
功能简介
HBase是一个面向列的数据库,一行数据,可能对应多个列族,而一个列族又可以对应
多个列。通常,写入数据的时候,我们需要指定要写入的列(含列族名称和列名
称)。HBase通过HTable的put方法来Put数据,可以是一行数据也可以是数据集。
代码样例
以下代码片段在cn.chinatelecom.hbase.sample.client包的“HBaseClient”类的put方
法中。
/*
插入数据:
主键 账号 邮箱 年龄 工作
1000101 molika tt@hotmail.cn 29 IT
1000102 kouda kouda@126.com 24 销售
1000103 liusha liusha@173.com 36 经理
1000104 baifei baifei@qq.com 16 学生
*/
public void put(TableName tableName) throws IOException{
Table table = null;
byte[] family = Bytes.toBytes("info");
byte[][] qualifiers = {Bytes.toBytes("account"),Bytes.toBytes("email"),Bytes.toBytes("age"),Bytes.toBytes("career")};
try {
table = conn.getTable(tableName);
//单个put
Put put = new Put(Bytes.toBytes("1000101"));
put.addColumn(family,qualifiers[0],Bytes.toBytes("molika"));
put.addColumn(family,qualifiers[1],Bytes.toBytes("tt@hotmail.cn"));
put.addColumn(family,qualifiers[2],Bytes.toBytes("29"));
put.addColumn(family,qualifiers[3],Bytes.toBytes("IT"));
table.put(put);
//批量put
List<Put> puts = new ArrayList<>();
put = new Put(Bytes.toBytes("1000102"));
put.addColumn(family,qualifiers[0],Bytes.toBytes("kouda"));
put.addColumn(family,qualifiers[1],Bytes.toBytes("kouda@126.com"));
put.addColumn(family,qualifiers[2],Bytes.toBytes("24"));
put.addColumn(family,qualifiers[3],Bytes.toBytes("销售"));
puts.add(put);
put = new Put(Bytes.toBytes("1000103"));
put.addColumn(family,qualifiers[0],Bytes.toBytes("liusha"));
put.addColumn(family,qualifiers[1],Bytes.toBytes("liusha@173.com"));
put.addColumn(family,qualifiers[2],Bytes.toBytes("36"));
put.addColumn(family,qualifiers[3],Bytes.toBytes("经理"));
puts.add(put);
put = new Put(Bytes.toBytes("1000104"));
put.addColumn(family,qualifiers[0],Bytes.toBytes("baifei"));
put.addColumn(family,qualifiers[1],Bytes.toBytes("baifei@qq.com"));
put.addColumn(family,qualifiers[2],Bytes.toBytes("16"));
put.addColumn(family,qualifiers[3],Bytes.toBytes("学生"));
puts.add(put);
table.put(puts);
} catch (IOException e) {
LOGGER.error("put data failed,",e);
} finally {
table.close();
}
}
注意事项
不允许多个线程在同一时间共用同一个HTable实例。HTable是一个非线程安全类,因
此,同一个HTable实例,不应该被多个线程同时使用,否则可能会带来并发问题。