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. Javascript中定时器的使用方法

    Javascript中定时器的使用方法 1.间隔定时器(每隔一段时间执行一次代码) 格式:setInterval(函数,时间) //时间单位是毫秒,每隔设置的时间执行函数里的内容一遍(一直执行) // ...

  2. 云计算实验二 Docker实验-docker安装

    一.实验目的  1.了解Docker服务安装: 2.掌握Docker镜像操作 二.实验内容 1.Docker服务安装 查看内核版本 uname -r 安装依赖环境: yum install -y yu ...

  3. vue学习10-计算属性

    计算属性 1 <!DOCTYPE html> 2 <html lang='en'> 3 <head> 4 <meta charset='UTF-8'> ...

  4. 原子操作atomic解读

    下面从一个问题引入: // ConsoleApplication5.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include<ran ...

  5. MySQL存储引擎(最全面的概括)

    目录 一:MySQL存储引擎 1.什么是存储引擎? 2.查看存储引擎信息 二:MySQL支持的存储引擎 1.存储引擎 三:innoDB存储引擎 1.特性 2.存储结构 3.优缺点.适用场景 四:MyI ...

  6. Charles和mitmproxy代理设置

    1.Charles安装: 1. windows 安装证书 2. 3. 4. 5   pc端设置: Android 手机上设置代理: 先查看pc 端的ip: 2.模拟器进入wifi,按住wifi 3. ...

  7. springcloud 负载均衡之 ribbon。

    一.什么是 ribbon? 就是负载均衡! nginx也是负载均衡 1.1 !!!!ribbon和nginx的区别是什么? /* nginx: 正向代理(和客户端连在一起) 反向代理(和服务器端连在一 ...

  8. vue组件中使用watch响应数据

    在vue中,使用watch来响应数据的变化.watch的用法大致有三种.下面代码是watch的一种简单的用法: 普通用法: <template> //视图 <input v-mode ...

  9. 「IOI2009」旅行商

    题目传送门 首先,看到这道题感觉就像dp(然鹅没什么用). 一个美好的设想 假如没有两个展销会在同一天开展:前途光明 暴力dp,复杂度o(\(n^2\)). 没有同一天的展销会 暴力dp慢,是因为本质 ...

  10. Td 内容不换行,超过部分自动截断,用...表示

    转载请注明来源:https://www.cnblogs.com/hookjc/ <table width="200px" style="table-layout:f ...