hbase里在已有表中添加一个列族

本文分享了在HBase中正确添加列族的方法。作者最初尝试通过直接操作Table实例来添加列族,但遇到了错误。经过研究,最终采用禁用表、修改表描述符并重新启用表的方式成功实现。此过程涉及Admin接口的使用。

在看了书上API后我以为添加一个列族是这样的

public void addAFamily(String tableName,String familyName) throws IOException{
        init();
        Table table=connection.getTable(TableName.valueOf(tableName));
        HTableDescriptor hDescriptor= table.getTableDescriptor();
        HColumnDescriptor hColumnDescriptor=new HColumnDescriptor(familyName);
        hDescriptor.addFamily(hColumnDescriptor);
        close();

    }

然后我也没试它的效果我就直接拿来用了,结果是

看到这个错,很懵逼,我还以为是静态函数的问题,然后又去调那个函数,发现根本不对。然后去网上找了下addFamily的用法,发现了一些问题,解决办法请参考https://blog.csdn.net/lr131425/article/details/72621562

最后修改后代码:

public void addAFamily(String tableName,String familyName) throws IOException{
        init();
        TableName tablename=TableName.valueOf(tableName);
        admin.disableTable(tablename);
        HTableDescriptor hDescriptor= admin.getTableDescriptor(tablename);
        HColumnDescriptor hColumnDescriptor=new HColumnDescriptor(familyName);
        hDescriptor.addFamily(hColumnDescriptor);
        admin.modifyTable(tablename, hDescriptor);
        admin.enableTable(tablename);
        close();

    }

注:admin是定义在类开头的静态变量,不知道的请参考我这一章的代码https://blog.csdn.net/HYDMonster/article/details/80005045


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值