delete.addColumns()和delete.addColumn()的区别

/**
* delete.addColumns();
* delete.addColumn();
* 区别:
* addColumn是删除某一个列簇里的最新时间戳版本。
* 传时间戳,则删除指定版本
* addColumns是删除某个列簇里的所有时间戳版本。其如果修改数据后, 不进行flush或没到flush事件,则会出现旧数据的出现;造成数据未修改彻底未删除彻底
* 传时间戳,可删除指定版本,如果没有指定版本的数据则删除小于等于<=该指定版本的所有数据
* 所以大部分用addColumn()
**/

建表时避免多个版本,避免后期需要删除

API代码
package com.hadoop100.test;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes; import java.io.IOException; /**
* @author : GuoSpringStrong
* @date : Created in 2022/2/22 16:22
* @description :
*/
public class TestAPI {
private static Connection connection;
private static Admin admin; //静态代码块,一些配置信息
static {
try {
//获取配置信息
Configuration conf = HBaseConfiguration.create();
conf.set("hbase.zookeeper.quorum", "hadoop102,hadoop103,hadoop104"); //创建连接对象
connection = ConnectionFactory.createConnection(conf); //创建admin对象
admin = connection.getAdmin(); } catch (IOException e) {
e.printStackTrace();
} } //关闭资源
public static void close() {
if (admin != null) {
try {
admin.close();
} catch (IOException e) {
e.printStackTrace();
}
} if (connection != null) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
} } //1 判断表是否存在
public static boolean isTableExist(String tableName) throws IOException { return admin.tableExists(TableName.valueOf(tableName));
} //2 创建表
public static void createTable(String tableName, String... columnFamily) throws IOException {
//判断是否存在列族信息
if (columnFamily.length <= 0)
System.out.println("请设置列族信息!");
//判断表是否存在
if (isTableExist(tableName)) {
System.out.println(tableName + "已存在");
return;
} else System.out.println(tableName + "不存在"); //创建表描述器
HTableDescriptor hTableDescriptor = new HTableDescriptor(TableName.valueOf(tableName));
//添加列族信息
for (String cf : columnFamily) {
//创建列族描述器
HColumnDescriptor hColumnDescriptor = new HColumnDescriptor(cf);
hTableDescriptor.addFamily(hColumnDescriptor);
} //创建表
admin.createTable(hTableDescriptor);
System.out.println("表" + tableName + "创建成功!"); } //3 创建命名空间
public static void createNameSpace(String nameSpace) {
//创建命名空间描述器
NamespaceDescriptor nameSpaceDescriptor = NamespaceDescriptor.create(nameSpace).build();
//创建命名空间
try {
admin.createNamespace(nameSpaceDescriptor);
System.out.println(nameSpace + " 命名空间已创建!");
} catch (NamespaceExistException e) {
System.out.println(nameSpace + " 命名空间已存在!");
} catch (IOException e) {
e.printStackTrace();
} } //4 删除表
public static void dropTable(String tableName) throws IOException {
//判断表是否存在
if (!isTableExist(tableName)) {
System.out.println(tableName + "不存在!");
return;
} //使表下线
admin.disableTable(TableName.valueOf(tableName));
//删除表
admin.deleteTable(TableName.valueOf(tableName));
System.out.println(tableName + "表删除成功"); } //5 插入数据
public static void putData(String tableName, String rowKey, String colInfo, String colName, String value) throws IOException {
//获取表
Table table = connection.getTable(TableName.valueOf(tableName)); //创建Put对象,存放数据
Put put = new Put(Bytes.toBytes(rowKey));
//向put对象中添加列信息:列族、列名、值
put.addColumn(Bytes.toBytes(colInfo), Bytes.toBytes(colName), Bytes.toBytes(value)); //插入数据
table.put(put); //关闭资源
table.close(); } //6 获取数据
public static void getData(String tableName, String rowKey, String colInfo, String colName) throws IOException {
//获取表
Table table = connection.getTable(TableName.valueOf(tableName)); //创建Get对象,获取数据
Get get = new Get(Bytes.toBytes(rowKey));
//获取指定列族
//get.addFamily(Bytes.toBytes(colInfo));
//获取指定列
//get.addColumn(Bytes.toBytes(colInfo), Bytes.toBytes(colName)); //获取数据
Result result = table.get(get); //解析result并打印
for (Cell cell : result.rawCells()) {
//打印
System.out.print("行键:" + Bytes.toString(CellUtil.cloneRow(cell)) + "\t");
System.out.print("列族:" + Bytes.toString(CellUtil.cloneFamily(cell)) + "\t");
System.out.print("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell)) + "\t");
System.out.print("值:" + Bytes.toString(CellUtil.cloneValue(cell)) + "\n");
} table.close();
} //7 获取数据(scan扫描)
public static void scanTable(String tableName) throws IOException {
//获取表
Table table = connection.getTable(TableName.valueOf(tableName)); //获取数据
ResultScanner results = table.getScanner(new Scan()); //解析数据
for (Result result : results) {
for (Cell cell : result.rawCells()) {
//打印
System.out.print("行键:" + Bytes.toString(CellUtil.cloneRow(cell)) + "\t");
System.out.print("列族:" + Bytes.toString(CellUtil.cloneFamily(cell)) + "\t");
System.out.print("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell)) + "\t");
System.out.print("值:" + Bytes.toString(CellUtil.cloneValue(cell)) + "\n"); }
System.out.println();
} table.close(); } //8 删除数据
public static void delectData(String tableName, String rowKey, String colInfo, String colName) throws IOException {
Table table = connection.getTable(TableName.valueOf(tableName)); //创建删除对象
Delete delete = new Delete(Bytes.toBytes(rowKey)); //删除指定列
delete.addColumn(Bytes.toBytes(colInfo), Bytes.toBytes(colName));
/**
* delete.addColumns();
* delete.addColumn();
* 区别:
* addColumn是删除某一个列簇里的最新时间戳版本。
* 传时间戳,则删除指定版本
* addColumns是删除某个列簇里的所有时间戳版本。其如果修改数据后, 不进行flush或没到flush事件,则会出现旧数据的出现;造成数据未修改彻底未删除彻底
* 传时间戳,可删除指定版本,如果没有指定版本的数据则删除小于等于<=该指定版本的所有数据
* 所以大部分用addColumn()
**/ //删除列族
delete.addFamily(Bytes.toBytes(colInfo)); //执行删除
table.delete(delete); table.close();
} public static void main(String[] args) throws IOException {
//判断表是否存在
//System.out.println(isTableExist("stu2")); //创建命名空间
//createNameSpace("0425"); //创建表
//createTable("0425:stu2", "info1", "info2"); //插入数据
//putData("0425:stu2", "1001", "info1", "sex", "male"); //获取数据
getData("stu", "1001", "personal_info", ""); //扫描表
scanTable("stu"); //删除表
//dropTable("stu2"); //关闭资源
close();
}
}



HBase学习记录-API的更多相关文章

  1. HBASE学习笔记--API

    HBaseConfiguration HBaseConfiguration是每一个hbase client都会使用到的对象,它代表的是HBase配置信息.它有两种构造方式: public HBaseC ...

  2. Hbase学习记录(1)|伪分布式安装

    概述 Hbase –Haddop Database 是一个高性能,高可靠性.面向列.可伸缩的分布式存储系统. Hbase利用HDFS作为文件存储系统,利用MapReduce来处理Hbase的海量数据, ...

  3. Hbase 学习记录

    说明: 公司最近要使用HBase 用于(冷)历史数据 存储,和简单离线计算.在一次讨论会上,我发表意见,为什么把近期数据流程热点数据库中,并且继续异步流入到 历史数据库HBase 里面.提供高效查询等 ...

  4. HBase学习记录

    HBase 使用docker搭建参考https://blog.csdn.net/baifanwudi/article/details/78498325 搭建好以后,网页端可以看到: terminal ...

  5. Hbase学习记录(2)| Shell操作

    查看表结构 describe '表名' 查看版本 get '表名','zhangsan'{COLUMN=>'info:age',VERSIONS=>3} 删除整行 deleteall '表 ...

  6. HBase 学习之一 <<HBase使用客户端API动态创建Hbase数据表并在Hbase下导出执行>>

    HBase使用客户端API动态创建Hbase数据表并在Hbase下导出执行                       ----首先感谢网络能够给我提供一个开放的学习平台,如果没有网上的技术爱好者提供 ...

  7. Hbase学习(三)过滤器 java API

    Hbase学习(三)过滤器 HBase 的基本 API,包括增.删.改.查等. 增.删都是相对简单的操作,与传统的 RDBMS 相比,这里的查询操作略显苍白,只能根据特性的行键进行查询(Get)或者根 ...

  8. HBase学习笔记-高级(一)

    HBase1. hbase.id记录了集群的唯一标识:hbase.version记录了文件格式的版本号2. split和.corrupt目录在日志分裂过程中使用,以便保存一些中间结果和损坏的日志在表目 ...

  9. HBase学习系列

    转自:http://www.aboutyun.com/thread-8391-1-1.html 问题导读: 1.hbase是什么? 2.hbase原理是什么? 3.hbase使用中会遇到什么问题? 4 ...

随机推荐

  1. scanf报错问题

    VS2013 scanf()函数报错问题. 编译器就是说这个环境下用scanf()函数不安全,建议使用scanf_s()函数.如何要使用scanf()函数的话,就需要在头文件或者源文件开头加上:use ...

  2. 【VictoriaMetrics】vm单机版和vm-storage的查询功能的对比

    1.vm-storage源码调用表 文件 行号 函数 说明 app/vmstorage/main.go 53 main 入口94行调用srv.RunVMSelect() app/vmstorage/t ...

  3. 读书笔记http之第一章

    http TCP/IP协议各层: 应用层 决定了向用户提供应用服务时通信的活动. 比如 : FTP(FileTransferProtocol,文件传输协议)和DNS(DomainNameSystem, ...

  4. gin框架中的渲染

    各种数据格式的响应 json.结构体.XML.YAML类似于java的properties.ProtoBuf 点击查看代码 // json响应 func someJson(context *gin.C ...

  5. IoC容器-Bean管理XML方式(注入集合类型属性)

    Ico操作Bean管理(xml注入集合属性) 1,注入数组类型属性 2,注入List集合类型属性 3,注入Map集合类型属性 (1)创建类,定义数组.list.map.set类型属性,生成对应set方 ...

  6. ambari-hadoop集群管理web工具

    https://baike.baidu.com/item/Ambari/19697889?fr=aladdin https://www.ibm.com/developerworks/cn/openso ...

  7. docker内存限制

    默认docker容器可以使用宿主机所有的内存和CPU,我们可以通过 docker run 来限制内存和CPU的使用. 有的系统内核不支持 Linux capabilities. 可以通过 docker ...

  8. 字的研究(3)fontTools-TrueType轮廓坐标的获取以及基于TrueType的Glyph实例的构建

    前言 本文主要介绍如果使用Python第三方库fontTools提取OpenType字体文件中的TrueType轮廓坐标以及如何构建基于TrueType的Glyph实例 TrueType轮廓坐标的获取 ...

  9. APP 性能分析工作台——你的最佳桌面端性能分析助手

    目前 MARS-App 性能分析工作台版本为开发者提供Fastbot桌面版的服务. 旨在帮助开发者们更快.更便捷地开启智能测试之旅,成倍提升稳定性测试的效率. 作者:字节跳动终端技术--王凯 背景 F ...

  10. 推荐一个基于Dapr的 Red Dog 的完整微服务应用程序

    微服务尽管构建起来非常困难,但它们已成为一种越来越流行的架构模式.随着开发人员开始将他们现有的单体代码库迁移到微服务系统,他们花费大量时间来处理分布式应用程序带来的固有挑战,例如状态管理和服务调用.通 ...