【HBase入门】8. HBase Java编程(2)——创建表、插入数据、删除数据
admin
2024-05-17 04:23:40
0次

前言

本文是HBase Java编程(2)——创建表、插入数据、删除数据。

需求一:使用Java代码创建表

创建一个名为WATER_BILL的表,包含一个列蔟C1。

实现步骤:

1.判断表是否存在——存在,则退出
2.使用TableDescriptorBuilder.newBuilder构建表描述构建器
3.使用ColumnFamilyDescriptorBuilder.newBuilder构建列蔟描述构建器
4.构建列蔟描述,构建表描述
5.创建表

参考代码:

// 创建一个名为WATER_BILL的表,包含一个列蔟C1
@Test
public void createTableTest() throws IOException {// 表名String TABLE_NAME = "WATER_BILL";// 列蔟名String COLUMN_FAMILY = "C1";// 1. 判断表是否存在if(admin.tableExists(TableName.valueOf(TABLE_NAME))) {return;}// 2. 构建表描述构建器TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(TableName.valueOf(TABLE_NAME));// 3. 构建列蔟描述构建器ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(COLUMN_FAMILY));// 4. 构建列蔟描述ColumnFamilyDescriptor columnFamilyDescriptor = columnFamilyDescriptorBuilder.build();// 5. 构建表描述// 添加列蔟tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptor);TableDescriptor tableDescriptor = tableDescriptorBuilder.build();// 6. 创建表admin.createTable(tableDescriptor);
}

需求三:使用Java代码删除表

实现步骤:

1.判断表是否存在
2.如果存在,则禁用表
3.再删除表

参考代码:
// 删除表
@Test
public void dropTable() throws IOException {// 表名TableName tableName = TableName.valueOf("WATER_BILL");// 1. 判断表是否存在if(admin.tableExists(tableName)) {// 2. 禁用表admin.disableTable(tableName);// 3. 删除表admin.deleteTable(tableName);}
}

需求二:往表中插入一条数据

创建包

1.在 test 目录中创建 cn.itcast.hbase.data.api_test 包
2.创建DataOpTest类

初始化Hbase连接
在@BeforeTest中初始化HBase连接,在@AfterTest中关闭Hbase连接。

参考代码:

public class DataOpTest {private Configuration configuration;private Connection connection;@BeforeTestpublic void beforeTest() throws IOException {configuration = HBaseConfiguration.create();connection = ConnectionFactory.createConnection(configuration);}@AfterTestpublic void afterTest() throws IOException {connection.close();}
}

插入姓名列数据
在表中插入一个行,该行只包含一个列。

ROWKEY姓名(列名:NAME)
4944191登卫红

实现步骤:

1.使用Hbase连接获取Htable
2.构建ROWKEY、列蔟名、列名
3.构建Put对象(对应put命令)
4.添加姓名列
5.使用Htable表对象执行put操作
6.关闭Htable表对象

参考代码:

@Test
public void addTest() throws IOException {// 1.使用Hbase连接获取HtableTableName waterBillTableName = TableName.valueOf("WATER_BILL");Table waterBillTable = connection.getTable(waterBillTableName);// 2.构建ROWKEY、列蔟名、列名String rowkey = "4944191";String cfName = "C1";String colName = "NAME";// 3.构建Put对象(对应put命令)Put put = new Put(Bytes.toBytes(rowkey));// 4.添加姓名列put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colName), Bytes.toBytes("登卫红"));// 5.使用Htable表对象执行put操作waterBillTable.put(put);// 6. 关闭表waterBillTable.close();
}

查看HBase中的数据
get 'WATER_BILL','4944191',{FORMATTER => 'toString'}

插入其他列

列名说明值
ADDRESS用户地址贵州省铜仁市德江县7单元267室
SEX性别男
PAY_DATE缴费时间2020-05-10
NUM_CURRENT表示数(本次)308.1
NUM_PREVIOUS表示数(上次)283.1
NUM_USAGE用量(立方)25
TOTAL_MONEY合计金额150
RECORD_DATE查表日期2020-04-25
LATEST_DATE最迟缴费日期2020-06-09

参考代码:

@Test
public void addTest() throws IOException {// 1.使用Hbase连接获取HtableTableName waterBillTableName = TableName.valueOf("WATER_BILL");Table waterBillTable = connection.getTable(waterBillTableName);// 2.构建ROWKEY、列蔟名、列名String rowkey = "4944191";String cfName = "C1";String colName = "NAME";String colADDRESS = "ADDRESS";String colSEX = "SEX";String colPAY_DATE = "PAY_DATE";String colNUM_CURRENT = "NUM_CURRENT";String colNUM_PREVIOUS = "NUM_PREVIOUS";String colNUM_USAGE = "NUM_USAGE";String colTOTAL_MONEY = "TOTAL_MONEY";String colRECORD_DATE = "RECORD_DATE";String colLATEST_DATE = "LATEST_DATE";// 3.构建Put对象(对应put命令)Put put = new Put(Bytes.toBytes(rowkey));// 4.添加姓名列put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colName), Bytes.toBytes("登卫红"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colADDRESS), Bytes.toBytes("贵州省铜仁市德江县7单元267室"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colSEX), Bytes.toBytes("男"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colPAY_DATE), Bytes.toBytes("2020-05-10"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colNUM_CURRENT), Bytes.toBytes("308.1"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colNUM_PREVIOUS), Bytes.toBytes("283.1"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colNUM_USAGE), Bytes.toBytes("25"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colTOTAL_MONEY), Bytes.toBytes("150"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colRECORD_DATE), Bytes.toBytes("2020-04-25"));put.addColumn(Bytes.toBytes(cfName), Bytes.toBytes(colLATEST_DATE), Bytes.toBytes("2020-06-09"));// 5.使用Htable表对象执行put操作waterBillTable.put(put);// 6. 关闭表waterBillTable.close();
}

相关内容

热门资讯

【甘快看】敦煌:把暖意揉进丝路... 中新网甘肃新闻10月5日电 鸣沙山的风卷着沙粒掠过丝路古道,远道而来的游人踏过漫漫黄沙,最先接住他们...
秋雨暂歇出游热度不退!南明区国... 告别前几日绵绵阴雨,国庆假期第五日,阵阵秋风吹散雨水,却吹不散南明区假日出游的火热氛围。古韵景区、潮...
农文旅深度融合绘出新画卷 潍坊... 齐鲁网·闪电新闻10月6日讯 国庆假期,安丘市乡村旅游持续升温。从郚山镇的山宿农文旅文化区到石埠子镇...
“床车大军”只蹭厕所不住房,酒... ▲资料图:新能源汽车在某充换电站充电。多功能配置让新能源汽车成了可供休息的“床车”。图/新华社“自驾...
家国同框 | 假期里的韩家窝村 10月5日清晨,来到韩家窝村,此村坐落于淄博周村南郊镇,墨水河畔,三面环山,是省级传统古村落,国家3...
假期余额不足 成都市民近郊游享... 10月6日,距离国庆假期结束仅剩一天。成都阳光普照,在百仁公园里,草坪上满是天幕与帐篷。市民们在城区...
散客占比近八成,九寨沟迈入“散... 封面新闻记者 杨金祝九寨沟景区正进入散客时代。10月6日,记者从九寨沟景区获悉,国庆假期,九寨沟迎来...
黄金周 中国游 | “便利政策... 央视网消息:上海正全力打造“中国入境游第一站”,并推动入境游从赏景购物转向深度体验。在上海,外国游客...
通讯|布哈拉全城都知道中国放长...   新华社塔什干10月6日电 通讯|布哈拉全城都知道中国放长假了——探访中亚跨境旅游热  新华社记者...
奔县游|美食好物:小城烟火藏文...   眼下,以沉浸式、慢体验、近短途为特点的“奔县游”持续升温。地处江淮分水岭的安徽省来安县,立足半山...