javaAPI操作hbase对表格的增删改查
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对表格的增删改查的更多相关文章
- 用AngularJS实现对表格的增删改查(仅限前端)
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 【原生】js实现表格的增删改查
说在前面的,写给小白白的,大神请绕道~ 今天用原生js写一下动态表格的增删改查,主要是熟悉一下js的DOM操作. 首先,做一个表格,用来显示提交的数据,如图下: 此处,我添加了编号.姓名.密码.生日. ...
- SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学、字符串、日期时间)函数[转]
SQL server 创建 修改表格 及表格基本增删改查 及 高级查询 及 (数学.字符串.日期时间)函数 --创建表格 create table aa ( UserName varchar(50 ...
- js实现表格的增删改查
这份代码实现了对表格的增加,删除,更改,查询. 点击一次添加按钮,表格会增加一行. 点击重置按钮,输入框的内容会被清空. 添加一行后,最后两格为更改和删除.点击更改,原有内容会各自显示在一个输入框内, ...
- 第三百零七节,Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- 基于AT UI实现表格的增删改查遇到的坑
基于AT UI实现表格的增删改查遇到的坑 坑一.表格数据加载的渲染报错 报错:Error in render: "TypeError: Cannot read property 'isChe ...
- 五 Django框架,models.py模块,数据库操作——表类容的增删改查
Django框架,models.py模块,数据库操作——表类容的增删改查 增加数据 create()方法,增加数据 save()方法,写入数据 第一种方式 表类名称(字段=值) 需要save()方法, ...
- jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!)
jQuery EasyUI/TopJUI实现数据表格的增删改查功能(不写js,纯HTML实现!!!) 废话不多说,直接贴上代码 <table id="configEdatagrid&q ...
- Vue+Mock.js模拟登录和表格的增删改查
有三类人不适合此篇文章: "喜欢站在道德制高点的圣母婊" -- 适合去教堂 "无理取闹的键盘侠" -- 国际新闻版块欢迎你去 "有一定基础但又喜欢逼逼 ...
- 快速开发平台WebBuilder中ExtJS表格的增删改查
使用WebBuilder可实现表格的自动增删改查功能,而无需编写前台脚本和后台SQL. WebBuilder开源项目地址:http://www.putdb.com 自动生成的页面: <!DOCT ...
随机推荐
- Java Maven POM配置参考
介绍 什么是POM? POM代表"项目对象模型".它是一个名为pom.XML的文件中保存的Maven项目的XML表示. 快速概览 这是一个直接位于POM项目元素下的元素列表.请注意 ...
- 【io_uring】liburing 用户库源码分析
文章目录 整体流程 `io_uring_queue_init` `io_uring_get_sqe` `io_uring_prep_#OP` `io_uring_sqe_set_data` `io_u ...
- SpringBoot整合ueditor编辑器
1.到ueditor编辑器官网下载jsp版(目前官网地址改为了GitHub)https://ueditor.baidu.com/website/download.html2.下载解压后复制到当前项目3 ...
- 如何平息WPS for linux启动后,笔记本风扇的怒吼
create:2022-09-06 20:02:45 WPS启动后,点击菜单栏右上角[未同步]按钮,不登录,直接关掉.几秒后,笔记本风扇嗷嗷叫.桌面conky显示wpscloudsvr进程CPU占用8 ...
- Vue3+vite路由配置优化(自动化导入)
今天在维护优化公司中台项目时,发现路由的文件配置非常多非常乱,只要只中大型项目,都会进入很多的路由页面,规范一点的公司还会吧路由进行模块化导入,但是依然存在很多文件夹的和手动导入的问题. 于是我想到了 ...
- 西门子300PLC转以太网无需编程实现与1200PLC转以太网数据交换
西门子300PLC转以太网无需编程实现与1200PLC转以太网数据通信 本文介绍利用兴达易控生产的PLC转以太网模块(MPI-ETH-XD1.0Plus)实现1200/1500PLC与300(CPU3 ...
- ORACEL12C ORA-01033:ORACLE 正在初始化或关闭
问题:客户端报ORA-01033 原因:oracle12C CDB启动,但是可拔插的PDB实例未启动 解决办法: sqlplus / as sysdba--系统管理员登录 alter session ...
- 普冉PY32系列(八) GPIO模拟和硬件SPI方式驱动无线收发芯片XN297LBW
目录 普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介 普冉PY32系列(二) Ubuntu GCC Toolchain和VSCode开发环境 普冉PY32系列(三) P ...
- [Python] 利用python的第三方库xlrd和xlwt来处理excel数据
今天在处理excel表格的时候,有一个需要提取表格中部分数据的操作.如果人工操作的话,有将近几千行,这样重复操作劳民伤财. 所以python就派上用场了. 简单介绍一下我要处理的问题,在excel一列 ...
- Net 高级调试之四:Windbg 动态调试
一.简介 今天是<Net 高级调试>的第四篇文章.到今天为止,也有三篇文章了,对 Windbg 也有初步的认识了,当然,一个工具流畅.熟练的使用,对于我们调试 Net 程序是至关重要的.在 ...