hbase 2.0.2 put和delete的一些坑
测试的inbox表为多版本表,封装的scanTable已设置查询全部版本,以下的测试基于hbase2.0.2
一.put(针对相同的rowkey)
测试1.使用方法链的形式对同一个put添加数据到不同的列
Table inbox = conn.getTable(TableName.valueOf(TABLE_INBOX));
Put inboxPut = new Put(Bytes.toBytes("1")); //测试1 同一个put添加到相同的列,虽然遍历结果和预期相同,但实际只有后一个addColumn插入到表中
inboxPut.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"),Bytes.toBytes("2_1542887724988"))
.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"),Bytes.toBytes("2_1542887724993")); inbox.put(inboxPut); CellScanner cs = inboxPut.cellScanner();
System.out.println("------put中的数据------");
while(cs.advance()) {
Cell cell = cs.current();
System.out.println("行键:" + Bytes.toString(CellUtil.copyRow(cell)));
System.out.println("列族:" + Bytes.toString(CellUtil.cloneFamily(cell)));
System.out.println("列名:" + Bytes.toString(CellUtil.cloneQualifier(cell)));
System.out.println("值:" + Bytes.toString(CellUtil.cloneValue(cell)));
}
scanTable(TABLE_INBOX);
控制台结果:
可以看到put中的数据是正确的但是真正插入的数据只有最后一个版本
测试2.putlist,两个put(rowkey相同),添加到相同的列
先对测试表进行清空,然后执行以下代码
Table inbox = conn.getTable(TableName.valueOf(TABLE_INBOX));
Put inboxPut = new Put(Bytes.toBytes("1"));
inboxPut.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"),Bytes.toBytes("2_1542887724988"));
Put inboxPut2 = new Put(Bytes.toBytes("1"));
inboxPut2.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"),Bytes.toBytes("2_1542887724993"));
List<Put> list = new ArrayList<Put>();
list.add(inboxPut);
list.add(inboxPut2);
inbox.put(list); scanTable(TABLE_INBOX);
结果:
仍然只有一个版本数据,第二版本覆盖了第一个版本
测试3.两个put(rowkey相同)插入到同一列
还是先清空测试表,然后执行以下代码
Table inbox = conn.getTable(TableName.valueOf(TABLE_INBOX));
Put inboxPut = new Put(Bytes.toBytes("1"));
inboxPut.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"),Bytes.toBytes("2_1542887724988"));
Put inboxPut2 = new Put(Bytes.toBytes("1"));
inboxPut2.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"),Bytes.toBytes("2_1542887724993")); inbox.put(inboxPut);
inbox.put(inboxPut2);
scanTable(TABLE_INBOX);
结果:
这次结果与预期一致,两个版本均插入到了表中
总结:put插入数据时.对于同一rowkey,相同列族下列名相同的列,方法链以及putList的形式均会对插入的多个版本进行覆盖,目前的解决方式是对于一个put.table就put下
二.delete
为了方便测试,先对测试表插入了一些数据,即rowkey=1,info:2 下面有两个版本的数据
测试1.只使用一次addColumn
//测试1 只使用一次addColumn
Table inbox = conn.getTable(TableName.valueOf(TABLE_INBOX));
Delete delete = new Delete(Bytes.toBytes("1"));
delete.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"));
inbox.delete(delete);
scanTable(TABLE_INBOX);
结果:
可以看到只删除了一个版本
测试2.使用方法链的形式,删除两个版本
先把测试表的数据恢复成两个版本,然后执行以下代码
//测试2 方法链
Table inbox = conn.getTable(TableName.valueOf(TABLE_INBOX));
Delete delete = new Delete(Bytes.toBytes("1"));
delete.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"))
.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"));
inbox.delete(delete);
scanTable(TABLE_INBOX);
结果:
两个版本数据均被删除,满足预期
测试3.deleteList
先把测试表恢复成两个版本的数据,然后执行以下代码
//测试3 deleteList
Table inbox = conn.getTable(TableName.valueOf(TABLE_INBOX));
Delete delete = new Delete(Bytes.toBytes("1"));
delete.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"));
Delete delete2 = new Delete(Bytes.toBytes("1"));
delete.addColumn(Bytes.toBytes(CF_INFO),Bytes.toBytes("2")); List<Delete> list = new ArrayList<Delete>();
list.add(delete);
list.add(delete2); inbox.delete(list);
scanTable(TABLE_INBOX);
结果与预期相符
测试4. 使用addColumns
先把测试表数据恢复成两个版本,然后执行以下代码
Table inbox = conn.getTable(TableName.valueOf(TABLE_INBOX));
Delete delete = new Delete(Bytes.toBytes("1"));
delete.addColumns(Bytes.toBytes(CF_INFO),Bytes.toBytes("2"));
inbox.delete(delete);
scanTable(TABLE_INBOX);
结果满足预期
总结:上面只是删除两个版本的数据,删除多版本的时候建议使用addColumns,可以一次性删除某个列的全部版本数据
hbase 2.0.2 put和delete的一些坑的更多相关文章
- 伪分布式hbase从0.94.11版本升级stable的1.4.9版本
Hbase从0.94.11升级到stable的1.4.9版本: 升级思路: hadoop1.1.2 hbase 0.94.11 ↓ had ...
- hbase 2.0.2 分布式安装配置/jar包替换
环境 zk: 3.4.10 hadoop 2.7.7 jdk8 hbase 2.0.2 三台已安装配置好的hadoop002,hadoop003,hadoop004 1.上传并解压hbase-2.1. ...
- 八年技术加持,性能提升10倍,阿里云HBase 2.0首发商用
摘要: 早在2010年开始,阿里巴巴集团开始研究并把HBase投入生产环境使用,从最初的淘宝历史交易记录,到蚂蚁安全风控数据存储,HBase在几代阿里专家的不懈努力下,已经表现得运行更稳定.性能更高效 ...
- EF Core 3.0 Preview 9 的2个小坑
之前我们的数据库服务器使用的是 SQL Server 2008 R2 ,由于从 EF Core 3.0 Preview 6 开始不支持 UseRowNumberForPaging ,只能停留在 EF ...
- HBase(0.94.5)的Compact和Split源码分析
经过对比,0.94.5以后版本主要过程基本类似(有些新功能和细节增加) 一. Compact 2.1. Compact主要来源 来自四个方面:1.Memstoreflush时:2.HR ...
- HBase编程 API入门系列之delete(客户端而言)(3)
心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. 前面的基础,如下 HBase编程 API入门系列之put(客户端而言)(1) HBase编程 API入门系列之get(客户端而言) ...
- HBase编程 API入门系列之delete(管理端而言)(9)
大家,若是看过我前期的这篇博客的话,则 HBase编程 API入门之delete(客户端而言) 就知道,在这篇博文里,我是在客户端里删除HBase表的. 这里,我带领大家,学习更高级的,因为,在开发中 ...
- HBase编程 API入门系列之delete.deleteColumn和delete.deleteColumns区别(客户端而言)(4)
心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. delete.deleteColumn和delete.deleteColumns区别是: deleteColumn是删除某一个列簇 ...
- 【甘道夫】HBase(0.96以上版本号)过滤器Filter具体解释及实例代码
说明: 本文參考官方Ref Guide,Developer API和众多博客.并结合实測代码编写.具体总结HBase的Filter功能,并附上每类Filter的对应代码实现. 本文尽量遵从Ref Gu ...
随机推荐
- Android Studio将Eclipse的项目作为module的依赖库
情形: 我们现在有一个eclipse的项目,我们想把这个项目作为android studio的module的一个依赖库. 以前我们在eclipse的时候常常是在一个工作区里面把一个A工程 as a l ...
- Python 极简教程(八)字符串 str
由于字符串过于重要,请认真看完并保证所有代码都至少敲过一遍. 对于字符串,前面在数据类型中已经提到过.但是由于字符串类型太过于常用,Python 中提供了非常多的关于字符串的操作.而我们在实际编码过程 ...
- [React & Debug] Quick way to debug Stateless component
For example we have the following code: const TodoList = (props) => ( <div className="Tod ...
- FindBug:Call to static DateFormat
今天在重构代码的过程中碰到了一个问题.使用SimpleDateFormat的问题. 本人今天写了一个类,主要是提供很多静态的方法由其他接口调用,过程中多个方法使用到了日期的格式化,所以我讲Simple ...
- TransE论文剩余部分
4.3链接预測 表3:链接预測结果.不同方法的性能. 整体结果 表3显示了全部数据集全部方法的比較. 与预期结果一致,经过过滤设置的结果具有较低的平均排名和较高的hits@10,相信在链接预測方面对各 ...
- 最全Pycharm教程(42)——Pycharm扩展功能之Emacs外部编辑器
1.主题 介绍怎样将Emacs定义为一个Pycharm外部编辑器. 2.准备工作 (1)Pycharm版本号为2.7或更高 (2)下载了downloadedEmacs并正确安装 3.配置Emacs 打 ...
- 【Eclipse提高开发速度-插件篇】Checkstyle的使用
1.CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发者遵守某些编码规范的工具. CheckStyle提供了大部分功能都是对于代码规范的检查 CheckStyle检验 ...
- Android NetworkOnMainThreadException异常
看名字就应该知道,是网络请求在MainThread中产生的异常 先来看一下官网的解释: Class Overview The exception that is thrown when an appl ...
- 【例题5-4 UVA - 156】Ananagrams
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每个字符串如果每个字符按照升序排一下.假设他们能够互相变化. 则肯定是一样的. 根据这个东西,用一个map来判重就好. [错的次数] ...
- spark提交应用的方法(spark-submit)
参考自:https://spark.apache.org/docs/latest/submitting-applications.html 常见的语法: ./bin/spark-submit \ ...