title: Python 读写 hbase 数据的正确姿势(二)
tags:
hbase
happybase
python
categories:
�Hbase
comments: true
date: 2017-09-17 18:00:00
问题1:小续
上一篇文章中讨论了,在使用 filter 查询 hbase 的过程中,使用python 容易忽略的一个问题:存储整型数据的时候,容易忽略将整型数据转换成 bytes 数据进行存储,进而使用 java filter 过滤时无法过滤出正确的结果。
仔细分析这个问题的发生的过程:
使用 python 将整型数据使用 str() 强转成字符串存入 hbase
使用 java 的相关 filter,传入参数时直接使用 Bytes.toBytes(1) 方法将整型转成 bytes 查询
无法得出正确的结果
其发生的根本原因是: 存入 hbase 的 1 这个值是 str(1) ,而使用 java 查的时候传入的过滤参数是 int(1) 转成的 bytes,这两者本身就不是一个类型,所以才会查出异常的结果。因此如果想用 java 在这种场景下查出正确的结果还有另一种方法,即传入的过滤参数是str(1) 转成的 bytes!
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("basic"),
Bytes.toBytes("ArticleTypeID"),
CompareOp.EQUAL, Bytes.toBytes("1"));
// 注意这里将传入的是字符串"1",而不是1L 这个整数
// Scan python table `test_article_1`
System.out.println("Prepare to scan !");
ResultScanner scanner = table.getScanner(s);
int num = 0;
for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
num++;
}