HBase2.x(五)HBase API DDL的操作

创建 HBaseDDL 类,添加静态方法即可作为工具类

public class HBaseDDL {
 // 添加静态属性 connection 指向单例连接
 	public static Connection connection = HBaseConnect.connection;
}

创建命名空间

    /**
     * 创建命名空间
     *
     * @param namespace 命名空间名称
     */
    public static void createNamespace(String namespace) throws IOException {
        //1.获取admin
        // 此处的异常先不要抛出,等待方法写完,再统一进行处理
        //admin的连接是轻量级的,不是线程安全的,不推荐池化,或者缓存这个连接
        Admin admin = connection.getAdmin();

        //2.调用方法创建命名空间
        //代码相对shell更加底层,所以shell能实现的功能,代码一定能实现,所以需要填写完整的命名空间描述

        //2.1 创建命名空间描述建造者 => 设计师
        NamespaceDescriptor.Builder builder = NamespaceDescriptor.create(namespace);

        //2.2 给命名空间添加需求
        builder.addConfiguration("user", "root");

        //2.3 使用builder构造出对应的添加完参数的对象,完成创建
        // 创建命名空间出现的问题,都属于本方法的问题 ,不应该抛出
        try {
            admin.createNamespace(builder.build());
        } catch (IOException e) {
            System.out.println("该命令已经存在");
            e.printStackTrace();
        }

        //3.关闭admin
        admin.close();

    }

创建表格是否存在

/**
     * 判断表是否存在
     *
     * @param namespace 命名空间名称
     * @param tableName 表格名称
     * @return true表示存在
     */
    public static boolean isTableExists(String namespace, String tableName) throws IOException {

        //1.获取admin
        Admin admin = connection.getAdmin();

        //2.使用方法判断表格是否存在
        boolean b = false;
        try {
            b = admin.tableExists(TableName.valueOf(namespace, tableName));
        } catch (IOException e) {
            e.printStackTrace();
        }

        //关闭连接
        admin.close();

        //3.返回结果
        return b;

        // 后面的代码不能生效
    }

创建表

/**
     * 创建表格
     *
     * @param namespace      命名空间名称
     * @param tableName      表格名称
     * @param columnFamilies 列祖名称 , 可以有多个
     */
    public static void createTable(String namespace, String tableName, String... columnFamilies) throws IOException {

        //判断的是否有一个列族
        if (columnFamilies.length == 0) {
            System.out.println("创建表格至少有一个列族");
            return;
        }

        //判断表格是否存在
        if (isTableExists(namespace, tableName)) {
            System.out.println("表格已经存在");
            return;
        }
        //1.获取admin
        Admin admin = connection.getAdmin();

        //2.调用方法创建表格
        //2.1 创建表格描述的建造者
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(namespace, tableName));

        //2.2 添加参数
        for (String columnFamily : columnFamilies) {
            //2.3创建列族描述的建造者
            ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(columnFamily));

            //2.4对应的列族添加参数
            // 添加参数版本
            columnFamilyDescriptorBuilder.setMaxVersions(5);

            //2.5 创建添加完参数的列族描述
            tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());
        }

        //2.6 创建对应表格描述
        try {
            admin.createTable(tableDescriptorBuilder.build());
        } catch (IOException e) {
            System.out.println("表格已存在");
            e.printStackTrace();
        }

        //3. 关闭admin
        admin.close();
    }

修改表格中一个列族的版本

    /**
     * 修改表格中的一个列祖的版本
     *
     * @param namespace    命名空间
     * @param tableName    表格名称
     * @param columnFamily 列族名称
     * @param version      版本
     */
    public static void modifyTable(String namespace, String tableName, String columnFamily, int version) throws IOException {

        //判断表格是否存在
        if (!isTableExists(namespace,tableName)){
            System.out.println("表格已存在,无法修改");
            return;
        }

        // 1.获取admin
        Admin admin = connection.getAdmin();

        try {
            // 2.调用方法修改表格
            // 2.0 获取之间的表格描述
            TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(namespace, tableName));

            // 2.1 创建一个表格描述建造者
            // TODO 如果使用填写tableName 方法,相当于创建一个新的表格描述建造者,没有之前信息
            // 如果要修改之前的信息, 必须调用方法填写一个就的表格描述
            TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(descriptor);

            // 2.2 对应建造者进行表格数据的修改
            ColumnFamilyDescriptor columnFamily1 = descriptor.getColumnFamily(Bytes.toBytes(columnFamily));

            // 创建列族描述建造者
            // 需要填写旧的列族描述
            ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(columnFamily1);

            // 修改对应的版本
            columnFamilyDescriptorBuilder.setMaxVersions(version);

            // 此处修改的时候,如果填写新的创建,那么别的参数会初始化
            tableDescriptorBuilder.modifyColumnFamily(columnFamilyDescriptorBuilder.build());
            admin.modifyTable(tableDescriptorBuilder.build());
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 3.关闭admin
        admin.close();
    }

删除表格

/**
     * 删除表格
     *
     * @param namespace 命名空间名称
     * @param tableName 表格名称
     * @return true 表示删除成功
     */
    public static boolean deleteTable(String namespace, String tableName) throws IOException {

        // 1.判断表格是否存在
        if (!isTableExists(namespace, tableName)) {
            System.out.println("表格已存在,无法删除");
            return false;
        }

        // 2.获取admin
        Admin admin = connection.getAdmin();

        try {

            //Hbase 删除表格之前,一定要先标记表格不可用
            TableName tableName1 = TableName.valueOf(namespace, tableName);
            admin.disableTable(tableName1);

            // 3.调用相关的方法删除表格
            admin.deleteTable(tableName1);
            System.out.println("删除成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 4.关闭admin
        admin.close();

        return true;
    }

DDL主程序

public class TheProgramDDL {

    public static void main(String[] args) throws IOException {
        //测试命名空间
        // 应该保证连接没有问题,再来调用相关的方法
        //createNamespace("huanhuan");


        //判断表格是否存在
        System.out.println(isTableExists("bigdata","hao"));

//        //测试创建表格
//        createTable("bigdata","huanhuan","info1");
//
//        //测试修改表格版本
//        modifyTable("bigdata","hao","info1",6);

        //删除表格
        deleteTable("bigdata","hao");

        //其他代码
        System.out.println("其他代码");

        //关闭 HBase的连接
        HBaseConnection.closeConnection();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值