插入数据
功能简介
HBase是一个面向列的数据库,一行数据,可能对应多个列族,而一个列族又可以对应多个列。
通常,写入数据的时候,我们需要指定要写入的列(含列族名称和列名称)。
HBase通过HTable的put方法来Put数据,可以是一行数据也可以是数据集。
代码样例
public void testPut() { LOG.info("Entering testPut."); // Specify the column family name. byte[] familyName = Bytes.toBytes("info"); // Specify the column name. byte[][] qualifiers = { Bytes.toBytes("name"), Bytes.toBytes("gender"), Bytes.toBytes("age"), Bytes.toBytes("address") }; Table table = null; try { // Instantiate an HTable object. table = conn.getTable(tableName); List<Put> puts = new ArrayList<Put>(); // Instantiate a Put object. Put put = new Put(Bytes.toBytes("012005000201")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("A")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("19")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Shenzhen, Guangdong")); puts.add(put); put = new Put(Bytes.toBytes("012005000202")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("B")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("23")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Shijiazhuang, Hebei")); puts.add(put); put = new Put(Bytes.toBytes("012005000203")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("C")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("26")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Ningbo, Zhejiang")); puts.add(put); put = new Put(Bytes.toBytes("012005000204")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("D")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("18")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Xiangyang, Hubei")); puts.add(put); put = new Put(Bytes.toBytes("012005000205")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("E")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("21")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Shangrao, Jiangxi")); puts.add(put); put = new Put(Bytes.toBytes("012005000206")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("F")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("32")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Zhuzhou, Hunan")); puts.add(put); put = new Put(Bytes.toBytes("012005000207")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("G")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("29")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Nanyang, Henan")); puts.add(put); put = new Put(Bytes.toBytes("012005000208")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("H")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Female")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("30")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Kaixian, Chongqing")); puts.add(put); put = new Put(Bytes.toBytes("012005000209")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("I")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("26")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Weinan, Shaanxi")); puts.add(put); put = new Put(Bytes.toBytes("012005000210")); put.addColumn(familyName, qualifiers[0], Bytes.toBytes("J")); put.addColumn(familyName, qualifiers[1], Bytes.toBytes("Male")); put.addColumn(familyName, qualifiers[2], Bytes.toBytes("25")); put.addColumn(familyName, qualifiers[3], Bytes.toBytes("Dalian, Liaoning")); puts.add(put); // Submit a put request. table.put(puts); LOG.info("Put successfully."); } catch (IOException e) { LOG.error("Put failed " ,e); } finally { if (table != null) { try { // Close the HTable object. table.close(); } catch (IOException e) { LOG.error("Close table failed " ,e); } } } LOG.info("Exiting testPut."); }
注意事项
不允许多个线程在同一时间共用同一个HTable实例。HTable是一个非线程安全类,因此,同一个HTable实例,不应该被多个线程同时使用,否则可能会带来并发问题。