栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

HBase的Put操作基础数据类型

HBase的Put操作基础数据类型

        以基础的数据类型String、Byte、Short、Integer、Long为例,介绍在Hbase中,如何通过Put操作将类实例对象中的基础数据类型数据写入Hbase。假设Hbase的表字段名称是以类对象所定义字段名的大写。

1,获取类对象字段名,获取一个类对象的所有定义的字段名哈希表,字段名大写-字段名。

private void setClassColumns() {
        Field[] fields = TestClass.class.getDeclaredFields();
        testClassColumns = Maps.newHashMap();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < fields.length; i++) {
           //Hbase表字段名是类对象定义字段的大写形式
            testClassColumns.put(fields[i].getName().toUpperCase(), fields[i].getName());
        }
    }

2,根据获取实例化后对象字段值,获取非空值的数据及对应的字段名,分别写入一个List values以及List columns列表。

List values = new ArrayList<>(); //对象实例非空字段list
List cloumns= new ArrayList<>(); //对象实例实际非空字段的字段名。
private void executeClass2Values(TestClass testClass){
        
        try {
            for (Map.Entry map : testClassColumns.entrySet()) {
                Field field = testClass.getClass().getDeclaredField(map.getValue().toString());
                field.setAccessible(true);
                if (field.get(testClass) != null) {
                   //values和columns分别写入非空值数值及对应的字段名。
                    values.add(field.get(testClass));
                    columns.add(map.getKey());//
                }
            }
        }catch (Exception e){
            
        }
    } 

3,将values及columns传入setPut函数,跟进不同数据类型分别向put添加列字段。如果是非Byte属性,都可以直接调用Hbase提供的Bytes静态类进行转换为byte[]数组。Byte字段可以采用直接定义一个字节数组进行赋值。

public Put setPut(String family, String key, String[] columns, List values) {
        try {
            Put put = new Put(Bytes.toBytes(key));
            for (int i = 0; i < values.size(); i++) {
                if (values.get(i) instanceof String) {
                    put = put.addColumn(family.getBytes(), columns[i].getBytes(), values.get(i).toString().getBytes());
                } else if (values.get(i) instanceof Byte) {
                    byte[] bytes = new byte[1];
                    bytes[0] = (byte)values.get(i);
                    put = put.addColumn(family.getBytes(), columns[i].getBytes(), bytes);
                } else if (values.get(i) instanceof Short) {
                    put = put.addColumn(family.getBytes(), columns[i].getBytes(), Bytes.toBytes((((Short) values.get(i)))));
                } else if (values.get(i) instanceof Integer) {
                    put = put.addColumn(family.getBytes(), columns[i].getBytes(), Bytes.toBytes((((Integer) values.get(i)))));
                } else if (values.get(i) instanceof Long) {
                    put = put.addColumn(family.getBytes(), columns[i].getBytes(), Bytes.toBytes(((Long) values.get(i))));
                }
            }
            return put;
        } catch (Exception e) {          
            return null;
        }
    } 

4,完成数据Put操作后,即可调用Hbase的插入数据操作。

public void insert(String table, Put put) throws Exception {
        HTable hTable = null;
        Connection connection = getConnection();
        try {
            hTable = (HTable) connection.getTable(TableName.valueOf(table));
            hTable.put(put);
        } catch (Exception e) {
            logger.error(e.toString());
        } finally {
            try {
                if (hTable != null) {
                    hTable.close();
                }
                if (connection != null) {
                    connection.close();
                }
            } catch (Exception e) {
                
            }
        }
    }

5,需要注意:a,要判断对象实例对应的数据是否为空,否则有可能出现对象数据和表字段不匹配。b,如果数据类型是Byte时,需要特殊处理,否则入库数据会有问题。

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号