3.4 DML

2023-11-16

package com.atguigu;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.List;

public class HBaseDML {
//添加静态属性connection指向单例连接
public static Connection connection = HBaseConnect01_单线程创建链接.connection;

public static void main(String[] args) throws IOException {
	putCell("bigdata","student","1002","info",
			"name","lisi");

	String cell = getCells("bigdata","student","1002","info",
			"name");

	System.out.println(cell);

	List<String> strings = scanRows("bigdata","student","1001","2000");

	for (String string :strings){
		System.out.println(string);
		deleteColumn("bigdata","student","1002","info", "name");
	}


}
/**
 * 插入数据
 * @param namespace 命名空间名称
 * @param tableName 表格名称
 * @param rowKey 主键
 * @param columnFamily 列族名称
 * @param columnName 列名
 * @param value 值
 */
public static void putCell(String namespace,String tableName,
        String rowKey,String columnFamily,String columnName,String value) throws IOException{
	//1.获取table
	Table table = connection.getTable(TableName.valueOf(namespace,tableName));

	//2.调用相关方法插入数据
		//2.1创建put对象
	Put put = new Put(Bytes.toBytes(rowKey));

		//2.2给put对象添加数据
	put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnFamily),Bytes.toBytes(value));

		//2.3将对象写入对应的方法
	try {
		table.put(put);
	} catch (IOException e) {
		e.printStackTrace();
		//throw new RuntimeException(e);
	}

	//3.关闭table
	table.close();
}

/**
 * 读取数据 读取对应的一行中的某一列
 *
 * @param namespace    命名空间名称
 * @param tableName    表格名称
 * @param rowKey       主键
 * @param columnFamily 列族名称
 * @param columnName   列名
 * @return
 */
public static String getCells(String namespace, String tableName, String rowKey,
                              String columnFamily, String columnName) throws IOException {
	//1.获取table
	Table table = connection.getTable(TableName.valueOf(namespace,tableName));

	//2.创建get对象
	Get get = new Get(Bytes.toBytes(rowKey));

	//如果直接调用get方法读取数据,此时读一整行数据
	//如果想读取某一列的数据,需要添加对应的参数
	get.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(columnName));

// //设置读取数据的版本
//此处无法识别,会报错
// get.readAllVersions();

	try {
		//读取数据,得到result对象
		Result result = table.get(get);
		//处理数据
		Cell [] cells = result.rawCells();

		//测试方法:直接把读取的数据打印到控制台
		//如果是实际开发,需要再额外写方法,对应处理数据
		for (Cell cell : cells){
			//cell存储数据比较底层
			String value = new String(CellUtil.cloneValue(cell));
			System.out.println(value);
		}
	} catch (IOException e) {
		e.printStackTrace();
		//throw new RuntimeException(e);
	}

	//关闭table
	table.close();

	return namespace;
}

/**
 * 扫描数据
 *
 * @param namespace 命名空间
 * @param tableName 表格名称
 * @param startRow  开始的 row 包含的
 * @param stopRow   结束的 row 不包含
 * @return
 */
public static List<String> scanRows(String namespace, String tableName,
                                    String startRow, String stopRow) throws IOException {
	//1.获取table
	Table table = connection.getTable(TableName.valueOf(namespace,tableName));

	//2.创建scan对象
	Scan scan = new Scan();
	//如果此时直接调用,会直接扫描整张表

	//添加参数,来控制扫描的数据
	//默认包含

	//下面两个scan会报错,即withStartRow和withStopRow会报错。

// scan.withStartRow(Bytes.toBytes(startRow));
//默认不包含
// scan.withStopRow(Bytes.toBytes(stopRow));

	try {
		//读取多行数据,获得scanner
		ResultScanner scanner = table.getScanner(scan);
		//result来记录一行数据,cell数组
		//ResultScanner来记录多行数据result的数组
		for (Result result : scanner){
			Cell[] cells = result.rawCells();
			for (Cell cell : cells){
				System.out.println(new String(CellUtil.cloneRow(cell)) + "-" +
								   new String(CellUtil.cloneFamily(cell)+ "-")+
									new String(CellUtil.cloneQualifier(cell))+ "-"+
									new String(CellUtil.cloneValue(cell)) + "\t");
			}
			System.out.println();
		}
	}catch (IOException e){
		e.printStackTrace();
	}

	//3.关闭table
	table.close();

	return null;
}

/**
 * 带过滤的扫描
 *
 * @param namespace 命名空间
 * @param tableName 表格名称
 * @param startRow 开始的 row 包含的
 * @param stopRow 结束的 row 不包含
 * @param columnFamily 列族名称
 * @param columnName 列名
 * @param value     value值
 * @throws IOException
 */
public static void filterScan(String namespace,String tableName,String startRow,String stopRow
		,String columnFamily,String columnName,String value) throws IOException {
	//1.获取table
	Table table = connection.getTable(TableName.valueOf(namespace,tableName));

	//2.创建scan对象
	Scan scan = new Scan();
	//如果此时直接调用,会直接扫描整张表

	//添加参数,来控制扫描的数据

	//此处会报错,需要注意还是scan.withStartRow
	//默认包含
	//scan.withStartRow(Bytes.toBytes(startRow));
	//默认不包含
	//scan.withStopRow(Bytes.toBytes(stopRow));

	//可以添加多个过滤
	FilterList filterList = new FilterList();

	//创建过滤器
	//(1)结果只保留当前列的数据

/* 这里还是会报错

	ColumnValueFilter columnValueFilter = new ColumnValueFilter(
			//列族名称
			Bytes.toBytes(columnFamily);
			//列名
			Bytes.toBytes(columnName);
			//比较关系
			CompareOperator.EQUAL;
			//值
			Bytes.toBytes(value);
	);

	*/

/* 这里还是会报错
//(2)结果保留整行数据
//结果同时会保留没有当前列的数据
SingleColumnValueFilter singleColumnValueFilter = new SingleColumnValueFilter(
//列族名称
Bytes.toBytes(columnFamily);
//列名
Bytes.toBytes(columnName);
//比较关系
CompareOperator.EQUAL;
//值
Bytes.toBytes(value);
);

	 */

	/*
	//本身可以添加过个过滤器
	filterList.addFilter(singleColumnValueFilter);

	*/

	//添加过滤
	scan.setFilter(filterList);

	try {
		//读取多行数据,获得scanner
		ResultScanner scanner = table.getScanner(scan);
		//result来记录一行数据,cell数组
		//ResultScanner来记录多行数据,result的数组
		for (Result result : scanner){
			Cell [] cells = result.rawCells();

			for (Cell cell : cells){
				System.out.println(new String(CellUtil.cloneRow(cell)) + "-" +
						new String(CellUtil.cloneFamily(cell))+ "-" +
						new String(CellUtil.cloneFamily(cell))+ "-" +
						new String(CellUtil.cloneValue(cell)) + "\t");
			}
			System.out.println();
		}
	}catch (IOException e){
		e.printStackTrace();
	}

	//3.关闭table
	table.close();

}

/**
 * 删除column数据
 *
 * @param namespace 命名空间
 * @param tableName 表格名称
 * @param rowKey
 * @param family
 * @param column 列名
 * @throws IOException
 */
public static void deleteColumn(String namespace,String tableName,String rowKey,String family,String column) throws IOException {
	//1.获取table
	Table table = connection.getTable(TableName.valueOf(namespace,tableName));

	//2.创建Delete对象
	Delete delete = new Delete(Bytes.toBytes(rowKey));

	//3.添加删除信息
	//3.1删除单个版本
	delete.addColumn(Bytes.toBytes(family),Bytes.toBytes(column));

	//3.2删除所有版本
	delete.addColumns(Bytes.toBytes(family),Bytes.toBytes(column));

	//3.3删除列族
	delete.addFamily(Bytes.toBytes(family));

	//4.删除数据
	table.delete(delete);

	//5.关闭资源
	table.close();

}

}// HBaseDML

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3.4 DML 的相关文章

  • HTTP 状态 404 - 请求的资源不可用

    在使用 MyEclipse IDE 中的 Tomcat 服务器和 Struts 2 框架时 我遇到了反复出现的问题 我将我的程序作为服务器应用程序运行 当它运行时 默认的index jsp 文件将成功打开 但应用程序的其他过去都不起作用 当
  • Spring控制器是线程安全的吗

    我遇到了这个控制器示例 想知道它是否是线程安全的 我特别想知道 gson 实例变量 import org springframework stereotype Controller import org springframework we
  • Google 地图查询返回的 JSON 包含像 \x26 这样的编码字符(如何解码?)

    在 Java 应用程序中 我获取 JSON 来自 Google 地图 其中包含以下字符 x26我想将其转换为其原始字符 据我所知 这是一个 UTF 8 表示法 但我不完全确定 在源 JSON 中 可能会出现各种编码字符 例如 x3c div
  • 如何对 IntStream 进行逆序排序

    我正在使用 txt 文件读取数字BufferedReader 我想颠倒该流中元素的顺序 以便在收集它们时 它们将从最高到最低排列 我不想在构建数组后进行排序 因为我不知道其中可能有多少元素 我只需要最高的 N 个元素 in new Buff
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • Java:从元素创建 DOM 元素,而不是文档

    如您所知 在 Java 中创建 Dom 元素的正确方法是执行以下操作 import org w3c dom Document import org w3c dom Element Document d Element e e d creat
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • Java替换特定字符

    这是我在这个网站上的第一个问题 所以我会尽量不要成为一个十足的菜鸟 我目前正在用java 创建刽子手游戏 所以我问你的问题是我们是否被赋予了 幽灵 这个词 并将 Ghost 替换为 hiddenWord ghost length for i
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • 如何在java中使jpeg无损?

    有没有人可以告诉我如何使用编写 jpeg 文件losslessjava中的压缩 我使用下面的代码读取字节来编辑字节 WritableRaster raster image getRaster DataBufferByte buffer Da
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 如何使用 Mockito 和 Junit 模拟 ZonedDateTime

    我需要模拟一个ZonedDateTime ofInstant 方法 我知道SO中有很多建议 但对于我的具体问题 到目前为止我还没有找到任何简单的解决办法 这是我的代码 public ZonedDateTime myMethodToTest
  • OpenJDK 版本控制

    上下文 我想确保我们系统上安装的 Java 不受 CVE 2022 21449 的影响 java version 给出 openjdk version 11 0 7 2020 04 14 LTS OpenJDK Runtime Enviro
  • 将 RSA 密钥从 BigIntegers 转换为SubjectPublicKeyInfo 形式

    WARNING 最初的问题是关于 PKCS 1 编码密钥 而问题中的实际示例需要SubjectPublicKeyInfo X 509 编码密钥 我目前正致力于在 java 中从头开始实现 RSA 算法 特别是密钥生成方面 现在我的代码可以给
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • MongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序

    MongoDB Java 驱动程序有三种不同的驱动程序选项 核心驱动 MongoDB 驱动程序 MongoDB 异步驱动程序 The 驱动程序描述页面 https docs mongodb org ecosystem drivers jav
  • Spring Boot MSSQL Kerberos 身份验证

    目前在我的春季靴子中application properties文件中 我指定以下行来连接到 MSSql 服务器 spring datasource url jdbc sqlserver localhost databaseName spr

随机推荐

  • 获取IP地址

    IPAddress vAddress null if REGEX URL Match vIP Length lt 1 IPHostEntry vDns Dns GetHostEntry vIP if vDns AddressList Len
  • 推荐系统的循序进阶读物(从入门到精通)

    为了方便大家从理论到实践 从入门到精通 循序渐进系统地理解和掌握推荐系统相关知识 特做了个读物清单 大家可以按此表阅读 也欢迎提出意见和指出未标明的经典文献以丰富各学科需求 为避免初学者疲于奔命 每个方向只推荐几篇经典文献 1 中文综述 了
  • 解决127.0.0.1 已拒绝连接的方法

    127 0 0 1 已拒绝连接 出现这种情况时 打开cmd 在cmd中 ping 127 0 0 1 会出现下图情况 在cmd中ping 127 0 0 1解析出来的是IPV6的 1 原因是windows有个优先解析列表 当ipv6的优先级
  • 电源篇 -- 升压电路 Boost

    感谢阅读本文 在接下来很长的一段时间里 我将陆续分享项目实战经验 从电源 单片机 晶体管 驱动电路 显示电路 有线通讯 无线通信 传感器 原理图设计 PCB设计 软件设计 上位机等 给新手综合学习的平台 给老司机交流的平台 所有文章来源于项
  • Android 读取assets中json文件

    1 通过BufferedReader方式读取 fun getAssetsFile fileName String context Context String 将json数据变成字符串 val stringBuilder StringBui
  • JavaScript-XHR-深入理解

    JavaScript XHR 深入理解 1 XHR Asynchronous JavaScript And XML 初始 1 1 xhr request demo 1 2 status of XHRHttpRequest 1 3 send
  • 深入分析父子线程、进程终止顺序不同产生的结果

    转自 http www jb51 net article 37374 htm 本篇文章是对父子线程 进程终止顺序不同产生的结果进行了详细的分析介绍 需要的朋友参考下 Linux下编程 线程 进程退出顺序问题纷纷扰扰 如果父进程 线程先于子进
  • 创建和管理 Windows Server 2019虚拟机

    1 VMware Workstation 虚拟机的网络模型 只安装虚拟机还是不够的 通常还需要虚拟机能与主机以及其他虚拟机进行通信 如大部分项目实训 都要通过在宿主机中安装 Windows Server 2019虚拟机 然后在宿主机与虚拟机
  • NPM常用命令

    npm install npm g 全局安装最新npm g所有地方都可以用 不用配置环境变量 npm install 下载的模块名 版本号 可以下载安装模块并安装指定的版本 npm config get registry 查看当前使用镜像
  • 经典算法题思路整理-Leetcode力扣经典算法题目整理

    自己能在面试中A4纸写出来的代码才是好代码 不要一味追求复杂度低的代码 如果写都写不出来更不用谈复杂度 第一遍先大概粗过一遍题目思路 第二遍再刷代码 标注出不熟悉的题目 隔天复习 加强记忆 数组 数学 字符串 链表 二叉树 回溯 搜索 动态
  • Python Matplotlib基本使用

    1 对坐标轴的操作 import matplotlib pyplot as plt plt figure num 1 x np linspace 0 np pi y sin np sin x plt plot x y sin 生成线段图 p
  • 使用Pytorch计算分类模型的混淆矩阵

    第一部分 基础原理 参考链接 1 使用pytorch和tensorflow计算分类模型的混淆矩阵 B站视频讲解 推荐博文 4 4 2分类模型评判指标 一 混淆矩阵 Confusion Matrix 第二部分 代码详解 1 YOLOV5 5
  • 真正的opencv配置,搞了好久。

    opencv VS2010 win7 64位 首先 opencv版本 vs版本 系统多少位都没关系 虽然系统是64位的 但是只要你想编写在32位上也可以跑的程序 那就按这个来就行 1 环境变量 新建环境变量例如opencv 然后在path里
  • python实现将给定列表划分为元素和大致相等的两个子列表

    假设现有列表 300 150 75 38 19 9 5 2 我想把它划分为两个子列表 并要求两个列表的元素和大致相等 应该如何做 这是一个很有意思的问题 我们期待的答案应该是 list1 300 list2 150 75 38 19 9 5
  • 接口测试面试题,等你来看

    1 你们公司的接口测试流程是 接口测试我们是在xx项目做的 主要有xx接口 xx接口等 1 首先是从开发那里拿到API接口文档 了解接口业务 包括接口地址 接口方式 入参 出参 token鉴权 返回格式等信息 2 然后使用postman或j
  • 人工智能---深度学习神经网络神经元的实现

    系列文章目录 人工智能 深度学习从感知机到神经网络 文章目录 系列文章目录 前言 一 神经元的组成 二 激活函数的实现 1 什么是激活函数 2 常见的激活函数 3 激活函数实现 三 神经元实现 1 初始化参数 2 权重设置 3 偏置设置 4
  • servlet和java区别_Java中Applet和Servlet之间的区别是什么

    在Java中 Applet和servlet的主要区别是 applet是在客户端计算机上执行的应用程序 Applet和servlet是小型Java程序或应用程序 但是它们之间存在着许多差异 本篇文章就给大家介绍Applet和servlet的区
  • 中标麒麟QT中qDebug无输出问题解决办法

    一 系统环境 中标麒麟V5 qt creator 4 3 1 qt5 qtbase 5 6 2 二 问题 代码中qDebug 函数无输出 但qInfo 和qWarning 有输出 创建一个test工程 使用qDebug 打印信息 但是没有任
  • 新冠肺炎国内外数据实时API接口

    这个是从丁香园和百度疫情获取的两套疫情数据 使用Springboot封装了一下 对外提供API接口 数据包括 国内疫情数据 全球疫情数据 疫情最新资讯 其中丁香园包含了各种JPG格式的图表 百度包含今日疫情热搜等 百度包含了疫情历史数据 具
  • 3.4 DML

    package com atguigu import org apache hadoop hbase Cell import org apache hadoop hbase CellUtil import org apache hadoop