HBase Client API使用(二)---查询及过滤器
相关知识
创建表插入数据删除等见:http://www.cnblogs.com/wishyouhappy/p/3735077.html
HBase API简介见:http://www.cnblogs.com/wishyouhappy/p/3753347.html
按行、列簇等查询
package wish.hbase; import java.io.IOException;
import java.util.ArrayList;
import java.util.List; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.HTablePool;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes; public class HBaseQuerydata
{
static Configuration cfg = HBaseConfiguration.create();
static { cfg.set("hbase.zookeeper.quorum", "192.168.1.95");
cfg.set("hbase.zookeeper.property.clientPort", "2181");
} public static void queryByRowKey(String tablename, String rowKey) throws IOException
{
HTable table = new HTable(cfg, tablename);
Get g = new Get(rowKey.getBytes());
Result rs = table.get(g); for (KeyValue kv : rs.raw())
{
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column : " + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} public static void queryByRowKeyFamily(String tablename, String rowKey, String family) throws IOException
{
HTable table = new HTable(cfg, tablename);
Get g = new Get(rowKey.getBytes());
g.addFamily(Bytes.toBytes(family));
Result rs = table.get(g);
for (KeyValue kv : rs.raw())
{
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column : " + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} public static void queryByRowKeyFamilyColumn(String tablename, String rowKey, String family, String column)
throws IOException
{
HTable table = new HTable(cfg, tablename);
Get g = new Get(rowKey.getBytes());
g.addColumn(family.getBytes(), column.getBytes()); Result rs = table.get(g); for (KeyValue kv : rs.raw())
{
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column : " + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} /*
* 查询所有
*/
public static void queryAll(String tableName) {
HTablePool pool = new HTablePool(cfg, 1000);
try {
ResultScanner rs = pool.getTable(tableName).getScanner(new Scan());
for (Result r : rs) {
System.out.println("rowkey:" + new String(r.getRow()));
for (KeyValue keyValue : r.raw()) {
System.out.println("列:" + new String(keyValue.getFamily())
+ " 值:" + new String(keyValue.getValue()));
}
}
} catch (IOException e) {
e.printStackTrace();
}
} public static void main(String[] args) throws Exception
{
System.out.println("******************************queryall******************************");
queryAll("wishtest1");System.out.println("******************************query by rowkey******************************");
queryByRowKey("wishTest1", "2");
System.out.println("******************************query by rowkey family******************************");
queryByRowKeyFamily("wishTest1", "2","name");
System.out.println("******************************query by rowkey family column******************************");
queryByRowKeyFamilyColumn("wishTest1", "6","score","Chinese");
}
}
输出如下:
******************************queryall******************************
rowkey:****1121
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:*1111
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:1
列:age 值:20
列:gender 值:male
列:name 值:rain
rowkey:2
列:age 值:20
列:gender 值:female
列:name 值:wish
rowkey:3
列:age 值:20
列:gender 值:male
列:name 值:Joey
rowkey:4
列:age 值:20
列:gender 值:male
列:name 值:Jenny
列:score 值:90
列:score 值:100
列:score 值:100
列:score 值:90
rowkey:5
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:6
列:age 值:20
列:gender 值:male
列:name 值:Joey
列:score 值:100
列:score 值:100
列:score 值:90
******************************query by rowkey******************************
rowkey: 2
Column Family: age
Column :
value : 20
rowkey: 2
Column Family: gender
Column :
value : female
rowkey: 2
Column Family: name
Column :
value : wish
******************************query by rowkey family******************************
rowkey: 2
Column Family: name
Column :
value : wish
******************************query by rowkey family column******************************
rowkey: 6
Column Family: score
Column : Chinese
value : 100
行过滤器
使用过滤器可以提高操作表的效率,HBase中两种数据读取函数get()和scan()都支持过滤器
可以使用预定义好的过滤器或者是实现自定义过滤器
过滤器在客户端创建,通过RPC传送到服务器端,在服务器端执行过滤操作
行过滤器简单例子如下:
测试table中所有数据如下:
rowkey:****1121
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:*1111
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:1
列:age 值:20
列:gender 值:male
列:name 值:rain
rowkey:2
列:age 值:20
列:gender 值:female
列:name 值:wish
rowkey:3
列:age 值:20
列:gender 值:male
列:name 值:Joey
rowkey:4
列:age 值:20
列:gender 值:male
列:name 值:Jenny
列:score 值:90
列:score 值:100
列:score 值:100
列:score 值:90
rowkey:5
列:age 值:20
列:gender 值:male
列:name 值:Chander
列:score 值:120
列:score 值:100
列:score 值:99
rowkey:6
列:age 值:20
列:gender 值:male
列:name 值:Joey
列:score 值:100
列:score 值:100
列:score 值:90
eg1:
public static void rowFilterLESS_OR_EQUAL(String tableName, String columnFamily, String column, String condition){
System.out.println("***********************start rowFilterLESS_OR_EQUAL***************************");
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column));
Filter f = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes(condition)));
scan.setFilter(f);
HTablePool pool = new HTablePool(cfg, 1000);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("***********************end rowFilterLESS_OR_EQUAL***************************");
}
public static void main(String[] args) {
String tableName = "wishTest1";
HBaseFilter.rowFilterLESS_OR_EQUAL(tableName, "score", "Math", "4");
}
输出:
***********************start rowFilterLESS_OR_EQUAL*************************** -------------------------------
rowkey: ****1121
Column Family: score
Column :Math
value : 99
-------------------------------
rowkey: *1111
Column Family: score
Column :Math
value : 99
-------------------------------
rowkey: 4
Column Family: score
Column :Math
value : 90
-------------------------------
rowkey: 5
Column Family: score
Column :Math
value : 99
***********************end rowFilterLESS_OR_EQUAL***************************
eg2:
/*
* rowFilterRegex
*/
public static void rowFilterRegex(String tableName, String columnFamily, String column, String condition){
System.out.println("***********************start rowFilterRegex***************************");
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column)); Filter f = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("\\*."));
scan.setFilter(f);
HTablePool pool = new HTablePool(cfg, 1000);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("***********************end rowFilterRegex***************************"); }
public static void main(String[] args) {
String tableName = "wishTest1";
HBaseFilter.rowFilterRegex(tableName, "score", "Math", "\\*");
}
输出:
***********************start rowFilterRegex***************************
-------------------------------
rowkey: ****1121
Column Family: score
Column :Math
value : 99
-------------------------------
rowkey: *1111
Column Family: score
Column :Math
value : 99
***********************end rowFilterRegex***************************
eg3:
/*
* rowFilterSubstring
*/
public static void rowFilterSubstring(String tableName, String columnFamily, String column, String condition){
System.out.println("***********************start rowFilterSubstring***************************");
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column)); Filter f = new RowFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("\\*"));
scan.setFilter(f);
HTablePool pool = new HTablePool(cfg, 1000);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} } catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("***********************end rowFilterSubstring***************************"); }
public static void main(String[] args) {
String tableName = "wishTest1";
HBaseFilter.rowFilterSubstring(tableName, "score", "Math", "\\*");
}
输出同上
列簇过滤器
public static void familyFilterLess(String tableName, String condition){
Filter filter = new FamilyFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));
Scan scan = new Scan();
scan.setFilter(filter);
HTablePool pool = new HTablePool(cfg,100);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
}
resultScanner.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
String tableName = "wishTest1";
HBaseFilter.familyFilterLess(tableName, "gender");
//HBaseFilter.rowFilterSubstring(tableName, "score", "Math", "\\*");
}
输出:
-------------------------------
rowkey: ****1121
Column Family: age
Column :
value : 20
-------------------------------
rowkey: *1111
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 1
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 2
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 3
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 4
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 5
Column Family: age
Column :
value : 20
-------------------------------
rowkey: 6
Column Family: age
Column :
value : 20
列名过滤器
/*
* 列名过滤器
*/ public static void qualifierFilterLess(String tableName, String condition){
Filter filter = new QualifierFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));
Scan scan = new Scan();
scan.setFilter(filter);
HTablePool pool = new HTablePool(cfg,100);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} resultScanner.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
值过滤器
/*
* 值过滤器
*/ public static void valueFilterLess(String tableName, String condition){
Filter filter = new ValueFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes(condition)));
Scan scan = new Scan();
scan.setFilter(filter);
HTablePool pool = new HTablePool(cfg,100);
try {
ResultScanner resultScanner = pool.getTable(tableName).getScanner(scan);
Result rs = resultScanner.next();
for (; rs != null; rs = resultScanner.next())
{
for (KeyValue kv : rs.list())
{
System.out.println("-------------------------------");
System.out.println("rowkey: " + new String(kv.getRow()));
System.out.println("Column Family: " + new String(kv.getFamily()));
System.out.println("Column :" + new String(kv.getQualifier()));
System.out.println("value : " + new String(kv.getValue()));
}
} resultScanner.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
HBase Client API使用(二)---查询及过滤器的更多相关文章
- 第四部分 数据搜索之使用HBASE的API实现条件查询
因为数据清洗部分需要用到Mapreduce,所以先解决hbase的问题,可以用命令先在hbase存一下简单的数据进行查询,之后只要替换数据就可以实现了原本功能 在看该部分前,确保Hase API看了, ...
- HBase 相关API操练(二):Java API
一.HBase Java编程 (1)HBase是用Java语言编写的,它支持Java编程: (2)HBase支持CRUD操作:Create,Read,Update和Delete: (3)Java AP ...
- 第六部分 数据搜索之使用HBASE的API实现条件查询
题目 使用HADOOP的MAPReduce,实现以下功能: (1)基于大数据计算技术的条件查询:使用mapreduce框架,实现类似Hbase六个字段查询的功能 (2)时段流量统计:以hh:mm:ss ...
- HBASE的读写以及client API
一:读写思想 1.系统表 hbase:namespace 存储hbase中所有的namespace的信息 hbase:meta rowkey:hbase中所有表的region的名称 column:re ...
- 073 HBASE的读写以及client API
一:读写思想 1.系统表 hbase:namespace 存储hbase中所有的namespace的信息 hbase:meta rowkey:hbase中所有表的region的名称 column:re ...
- TFS API:二、TFS 代码查询工作项
TFS API:二.TFS 代码查询工作项 首先我们需要认识TFS的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection, ...
- HBase总结(十二)Java API 与HBase交互实例
HBase提供了Java Api的訪问接口,掌握这个就跟Java应用使用RDBMS时须要JDBC一样重要 import java.io.IOException; import org.apache.h ...
- Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI
目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十)ES6.2.2 Client API
scala版本2.11 java版本1.8 spark版本2.2.1 es版本6.2.2 hadoop版本2.9.0 elasticsearch节点列表: 192.168.0.120 192.168. ...
随机推荐
- Qt 学习之路 :线程简介
现代的程序中,使用线程的概率应该大于进程.特别是在多核时代,随着 CPU 主频的提升,受制于发热量的限制,CPU 散热问题已经进入瓶颈,另辟蹊径地提高程序运行效率就是使用线程,充分利用多核的优势.有关 ...
- 深入探索C++对象模型-5
虚拟继承下的对象构造: 由于虚拟基类对象在子类中只能保持一个实例,那么,子类构造的时候调用父类的构造函数的时候必须保证虚拟基类对象不能够重复构造. 那么如何保证基类对象的唯一性? C++规定虚拟基类对 ...
- Apache MINA NioSocketAcceptor类的实现
NioSocketAcceptor 继承AbstractPollingIoAcceptor,实现SocketAcceptor接口 public final class NioSocketAccepto ...
- POJ 1039 Pipe 枚举线段相交
Pipe Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9493 Accepted: 2877 Description ...
- Python自动化之5种session类型
Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session Django默认支持Se ...
- php5.2通过saprfc扩展远程连接sap730成功案例
公司刚上sap系统,由于资金有限,sap与其它系统的数据交换需要公司内部实现.于是,领导决定入库申请流程需要在sap与OA系统里实现电子签核流,重担果然落到我的身上.好在我只负责OA,还一位同事负责s ...
- ASP.NET5配置
ASP.NET5支持各种各样的配置,应用程序配置数据可以来自JSON, XML或者INI格式的文件,也能来自环境变量,你也可以自定义你自己的Configuration Provider. 1. 获取和 ...
- html5 的百度地图连接
在一些网站上,我们经常会看到一些地址会有一个图标的形式展现,当你点击的时候就会加载一个你点击区域的地图出来,很神奇的一个功能,在之前是没有这样功能的,都是直接写上地址,你要去的话自己找去吧,现在有了这 ...
- phpstudy apache 刚启动便停止
1.添加站点 2.重启服务 3.遇见问题 apache 刚启动,1秒钟中后就停止 4.解决问题 发现是自己添加的网站中包含中文路径的问题,建议不要在自己的网站目录下包含中文.
- JFrome 登陆/注册/回显无数据库连接小程序
当离开RCP插件区重新回顾一下JFrame窗口程序的标签.页面间的跳转. 完成一个登陆.注册界面.(界面完成后练习输入输出流,将前台的注册信息保存到一个文件夹下的.txt文件中) 首先向通过JFram ...