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. WEB开发的相关知识(Tomcat)

    Internet上供外界访问的Web资源分为 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访 ...

  2. Sentry 开发者贡献指南 - 配置 PyCharm

    概述 如果您使用 PyCharm 进行开发,则需要配置一些内容才能运行和调试. 本文档描述了一些对 sentry 开发有用的配置 配置 Python 解释器:(确保它是 venv 解释器)例如 ~/v ...

  3. 《剑指offer》面试题36. 二叉搜索树与双向链表

    问题描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜 ...

  4. 使用 ES Module 的正确姿势

    前面我们在深入理解 ES Module 中详细介绍过 ES Module 的工作原理.目前,ES Module 已经在逐步得到各大浏览器厂商以及 NodeJS 的原生支持.像 vite 等新一代的构建 ...

  5. Git算不算程序员的必备技能?

    作者:慕课网链接:https://www.zhihu.com/question/41667536/answer/486640083来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  6. Linux 配置 SVN and ideal 配置SVN的客户端 ?

    Linux 配置 SVN? 4.配置svn(服务器端) 项目管理工具(subversion),每个公司都会用到(git/svn) 目的就是为了合作开发 4.1.从linux上安装svn 不需要从官网下 ...

  7. CF1408G Clusterization Counting

    首先,我们需要给一个连通块找到一个直观的合法判定解. 那么我们必须以一种直观的方式将边按照权值分开,这样才能直观地判定一个合法的组. 一个常见的方式是将边从小到大依次加入进来,那么在任意时刻图上存在的 ...

  8. Spring @Cacheable 缓存不生效的问题

    最近在项目中使用了Ehcache缓存,使用方式是用Spring提供的 @Cacheable 注解的方式,这种方式简单.快速.方便,推荐使用. 在使用的过程中,遇到了缓存不生效的情况,经过分析处理,总结 ...

  9. JQuery扩展方法实现Form表单与Json互相转换

    1.把表单转换出json对象 //把表单转换出json对象 $.fn.toJson = function () { var self = this, json = {}, push_counters ...

  10. Shell双重循环、图形排列及九九乘法表

    Shell双重循环.图形排列及九九乘法表 目录 Shell双重循环.图形排列及九九乘法表 一.双重循环 1. 双重循环概述 2. 双重循环结构 二.循环特殊操作 1. exit 2. break 3. ...