package date_20250328;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

public class task_DDL {
    public static void main(String[] args) throws Exception {
        // create方法会自动去加载运行时的classpath中的hbase-site.xml等配置文件
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop102:2181");

        // 创建一个hbase的客户端连接
        Connection conn = ConnectionFactory.createConnection(conf);

        // 拿到一个DDL的操作工具
        Admin admin = conn.getAdmin();

        /**
         * 建名称空间
         */
        NamespaceDescriptor descriptor = NamespaceDescriptor.create("ideaPro_space").build();
        admin.createNamespace(descriptor);

        // 创建一个列族描述 构造器
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("base_info"));
        // 通过  列族描述构造器 设置列族的参数
        columnFamilyDescriptorBuilder.setMaxVersions(2);
        // 通过  列族描述构造器，构造一个列族描述对象
        ColumnFamilyDescriptor familyDescriptor = columnFamilyDescriptorBuilder.build();
        // 创建第二个列族描述 构造器
        ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("extra_info"));
        // 通过  列族描述构造器 设置列族的参数
        columnFamilyDescriptorBuilder2.setMaxVersions(5);
        // 通过  列族描述构造器，构造一个列族描述对象
        ColumnFamilyDescriptor familyDescriptor2 = columnFamilyDescriptorBuilder2.build();


        // 创建表名对象
        TableName tableName = TableName.valueOf("ideaPro_space:students");
        // 创建一个表描述 构造器
        TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);
        // 通过表描述构造器，设置列族
        tableDescriptorBuilder.setColumnFamily(familyDescriptor);
        // 通过表描述构造器，设置第二个列族
        tableDescriptorBuilder.setColumnFamily(familyDescriptor2);
        // 通过表描述构造器，创建一个表描述对象
        TableDescriptor tableDescriptor = tableDescriptorBuilder.build();

        // 用admin来创建这个表
        admin.createTable(tableDescriptor);

        // 关闭客户端工具
        admin.close();
        conn.close();
    }
}
