hbase之shell命令java实现(二)--------表的操作

1.建表 表名 列族
  * 1)单列族
  * 2)多列族
  * 3)预分region表
  * 4)在DOIT名称空间下建表 DOIT:tb_stu
2 禁用表  是否禁用 启用 是否启用
3 表是否存在
4 删除表
5 修改表结构  列族
  * 5.1 modifyColumnFamily只能修改已经存在的列族
  * 5.2 admin.modifyTable(tableDescriptor); 参数是一个tableDescriptor描述对象  添加列族 删除列族 覆盖列族

1.建立表格

    1)单列族

private static void createTableOneCf(Admin admin) throws IOException {
        //表的构造器
        TableDescriptorBuilder tb_tableData1 = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_tableData1"));
        //列族构造器
        ColumnFamilyDescriptorBuilder familyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes());
        //设置属性  用列族构造器直接设置属性
        familyDescriptorBuilder.setMaxVersions(5);
        familyDescriptorBuilder.setTimeToLive(240);
        //设置了属性之后可以构造列族对象  用构造器调用build()方法
        ColumnFamilyDescriptor columnFamilyDescriptor1 = familyDescriptorBuilder.build();
        //将列族对象添加到表中   用表的构造器set列族对象
        tb_tableData1.setColumnFamily(columnFamilyDescriptor1);
        //构造表对象 表的构造器调用build()方法
        TableDescriptor tableDescriptor1 = tb_tableData1.build();
        admin.createTable(tableDescriptor1);
    }

在java实现hbase的shell命令中,大部分都是上一级先创建一个构造器(newbuilder),然后再创建下一级构造器(newbuilder),到最后一集时候,再设置属性,然后一层一层往上.build();大部分的构造器命令都是"名称+DescriptorBuilder"(例如表的构造器TableDescriptorBuilder)

    2)多列族

 private static void createTableMoreCf(Admin admin) throws IOException {
        //表构造器
        TableDescriptorBuilder tb_tableData2 = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_TableData2"));
        //列族构造器
        ColumnFamilyDescriptorBuilder familyDescriptorBuilder1 = ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes());
        ColumnFamilyDescriptorBuilder familyDescriptorBuilder2 = ColumnFamilyDescriptorBuilder.newBuilder("cf2".getBytes());
        //分别给两个列族设置属性
        familyDescriptorBuilder1.setTimeToLive(240);
        familyDescriptorBuilder1.setMaxVersions(5);
        familyDescriptorBuilder2.setMaxVersions(5);
        familyDescriptorBuilder2.setTimeToLive(240);
        //创建两个列族对象
        ColumnFamilyDescriptor columnFamilyDescriptor1 = familyDescriptorBuilder1.build();
        ColumnFamilyDescriptor columnFamilyDescriptor2 = familyDescriptorBuilder2.build();
        //将列族添加到list中
        ArrayList<ColumnFamilyDescriptor> columnFamilyDescriptors = new ArrayList<>();
        columnFamilyDescriptors.add(columnFamilyDescriptor1);
        columnFamilyDescriptors.add(columnFamilyDescriptor2);
        //将列族list设置到表中
        tb_tableData2.setColumnFamilies(columnFamilyDescriptors);
        //创建表对象
        TableDescriptor tableDescriptor = tb_tableData2.build();
        //建表
        admin.createTable(tableDescriptor);
    }

创建多列族的方法中,创建一个list接收ColumnFamilyDescriptor(列族对象),表能够设置列族的list

3)预分region表
 private static void createTablePreRegion(Admin admin) throws IOException {
        //表的构造器
        TableDescriptorBuilder tb_preRegion = TableDescriptorBuilder.newBuilder(TableName.valueOf("tb_preRegion"));
        //列族的构造器和创建列族对象
        ColumnFamilyDescriptor columnFamilyDescriptor = ColumnFamilyDescriptorBuilder.newBuilder("cf1".getBytes()).build();
        //给表设置属性
        tb_preRegion.setColumnFamily(columnFamilyDescriptor);
        //创建表
        TableDescriptor tableDescriptor = tb_preRegion.build();
        //创建节点二维数组
        byte[][] keys = {"rk026".getBytes(), "rk051".getBytes()};
        //调用的是参数为 表对象,节点二维数组 的建表方法
        admin.createTable(tableDescriptor,keys);
    }
4)在DOIT名称空间下建表 DOIT:tb_stu

    设置表名的时候直接设置TableName.valueof("DOIT:tb_stu"),就OK

代码不敲了,耶!

2 禁用表  是否禁用 启用 是否启用
private static void DropTable(Admin admin) throws IOException {
        TableName tb_drop = TableName.valueOf("tb_drop");
        if(admin.tableExists(tb_drop)){//如果表存在
            if(admin.isTableDisabled(tb_drop)){
                System.out.println("这个禁用了,我给你删了啊");
                admin.deleteTable(tb_drop);
            }else{
                System.out.println("这个没被禁用,我给你禁了啊,然后就删了");
                admin.disableTable(tb_drop);
                admin.deleteTable(tb_drop);
            }
        }else{
            System.out.println("神经病吧,就没有这个表");
        }
    }

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值