package org.example;

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;
import org.apache.hadoop.ipc.Server; import java.io.IOException; public class HBaseDDL {
//声明一个静态属性
public static Connection connection =HBaseConnection_duo.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","atguigu"); //2.3使用builder构造出对应的添加完整参数的对象 完成创建
// 创建命名空间出现的问题 都属于本方法自身的问题 不应该抛出
try {
admin.createNamespace(builder.build());
}catch (IOException e){
e.printStackTrace();
} //关闭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) {
throw new RuntimeException(e);
} //3.关闭连接
admin.close(); //4.返回结果
return b;
} /**
*
* @param namespace 命名空间名称
* @param tableName 表格名称
* @param columnFamilies 列族名称
*/
public static void creatTable(String namespace ,String tableName,String... columnFamilies) throws Exception { //判断是否至少有一个列族
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());
}
//创建对应的表格描述
try {
admin.createTable(tableDescriptorBuilder.build());
} catch (IOException e) {
System.out.println("表格已经存在");
throw new RuntimeException(e);
}
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)){
return;
} //1.获取admin
Admin admin = connection.getAdmin(); //2.调用方法修改表格
//2.0获取之前的表格描述
TableDescriptor descriptor = admin.getDescriptor(TableName.valueOf(namespace,tableName)); //2.1创建表格描述
//如果使用填写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()); try {
admin.modifyTable(tableDescriptorBuilder.build());
} catch (IOException e) {
throw new RuntimeException(e);
} admin.close();
}
public static boolean deleteTable(String namespace,String tableName) throws IOException {
//判断表格是否存在
if (!isTableExists(namespace,tableName)){
System.out.println("表格不存在,无法删除");
return false;
}
//2.获取admin
Admin admin = connection.getAdmin(); //3.调用方法删除表格
try {
admin.deleteTable(TableName.valueOf(namespace,tableName));
} catch (IOException e) {
throw new RuntimeException(e);
}
//4.关闭
admin.close();
return true;
}
public static void main(String[] args) throws Exception {
//测试创建命名者空间
//应该先保证连接没有问题 再来掉用方法
//createNamespace("atguigu"); //测试表格是否存在
// System.out.println(isTableExists("bigdata","student")); //测试创建表格
creatTable("atguigu","student","info","msg");
//其他代码
//测试修改表格
modifyTable("atguigu","student","info",6);
//测试删除表格
deleteTable("atguigu","student");
System.out.println("其他代码");
//关闭habse连接
connection.close();
}
}

javaAPI操作hbase对表格的增删改查的更多相关文章

  1. 用AngularJS实现对表格的增删改查(仅限前端)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  2. 【原生】js实现表格的增删改查

    说在前面的,写给小白白的,大神请绕道~ 今天用原生js写一下动态表格的增删改查,主要是熟悉一下js的DOM操作. 首先,做一个表格,用来显示提交的数据,如图下: 此处,我添加了编号.姓名.密码.生日. ...

  3. SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]

    SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数   --创建表格 create table aa ( UserName varchar(50 ...

  4. js实现表格的增删改查

    这份代码实现了对表格的增加,删除,更改,查询. 点击一次添加按钮,表格会增加一行. 点击重置按钮,输入框的内容会被清空. 添加一行后,最后两格为更改和删除.点击更改,原有内容会各自显示在一个输入框内, ...

  5. 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  6. 基于AT UI实现表格的增删改查遇到的坑

    基于AT UI实现表格的增删改查遇到的坑 坑一.表格数据加载的渲染报错 报错:Error in render: "TypeError: Cannot read property 'isChe ...

  7. 五 Django框架,models.py模块,数据库操作——表类容的增删改查

    Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...

  8. jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)

    jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!) 废话不多说,直接贴上代码 <table id="configEdatagrid&q ...

  9. Vue+Mock.js模拟登录和表格的增删改查

    有三类人不适合此篇文章: "喜欢站在道德制高点的圣母婊" -- 适合去教堂 "无理取闹的键盘侠" -- 国际新闻版块欢迎你去 "有一定基础但又喜欢逼逼 ...

  10. 快速开发平台WebBuilder中ExtJS表格的增删改查

    使用WebBuilder可实现表格的自动增删改查功能,而无需编写前台脚本和后台SQL. WebBuilder开源项目地址:http://www.putdb.com 自动生成的页面: <!DOCT ...

随机推荐

  1. datetime去除时分秒

    datetime.datetime.now().replace(microsecond=0)

  2. CodeForces-1324D-Pair-of-Topics

    题意 对于两个长度为\(n\)的数组\(a[]\)和\(b[]\),找到有多少对\(i\)和\(j\)\((i<j)\),满足\(a_i+a_j>b_i+b_j\) 分析 首先发现如果\( ...

  3. mysql8关闭binlog并清空Binlog

    编辑my.ini或者my.cnf文件 清空binlog信息 #查看现存的binlog文件列表 show master logs; #重置清空binlog文件 reset master; #重置清空后 ...

  4. LUA的一些工具备份

    table.unpack遇到的问题 做了个中转的服务, socket+json 传递数据, 通过 {...} 封装不定参数然后 json.encode 传递到其他服务器, 然后其他服务器 json.d ...

  5. Java 多线程线程池的工作流程

    1.在创建了线程池后,等待提交过来的任务请求. 2.当调用execute()方法添加一个请求任务时,线程池就会做如下判断: 2.1 如果正在运行的线程数量小于corePoolSize,那么马上创建线程 ...

  6. gitlab ci 集成 eslint/prettier/tsc 做代码审查,并使用 eslint 输出作为显示代码质量

    前言 想自动化一下公司里代码的部分审查,最初想用 reviewdog 的,但是公司的域名基本都在 VPN 中访问的,gitlab ci 的容器中是访问不到的,于是乎实验了 gitlab 代码质量功能. ...

  7. go defer简介

    思考 开始之前,先考虑下下面的代码的执行结果: package main import "fmt" func test() int { i := 0 defer func() { ...

  8. java后端操作树结构

    一.树结构的三种组装方式(递归.双层for循环,map) (1)递归 普通递归方法 public Result getBmsMenuList(UserSessionVO userSessionInfo ...

  9. kubernetes集群部署redis5.0.6单机版

    1.首先,通过Config Map来对容器中redis应用的配置进行管理,如自定义配置文件.密码.日志路径等 redis-standalone-conf.yml apiVersion: v1 kind ...

  10. 一文搞懂深度信念网络!DBN概念介绍与Pytorch实战

    本文深入探讨了深度信念网络DBN的核心概念.结构.Pytorch实战,分析其在深度学习网络中的定位.潜力与应用场景. 关注TechLead,分享AI与云服务技术的全维度知识.作者拥有10+年互联网服务 ...