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. ...
随机推荐
- [Falcor] Indroduce to Model
How to work with JSON data indirectly through a Falcor Model. The Falcor Model allows you to work wi ...
- Java Applet读写client串口——终极篇
測试环境: SDK:Oracle JRockit for Java version 6, Java Communication for Windows 2.0 OS:WINDOWS7 外设:串口条形码 ...
- 【iOS】3D Touch
文章内容来源于Apple的开发者文档:https://developer.apple.com/library/content/documentation/UserExperience/Conceptu ...
- Python操作MySQL -即pymysql/SQLAlchemy用法
本节介绍Python对于MySQL的一些操作用法 模块1:pymysql(等同于MySQLdb) 说明:pymysql与MySQLdb模块的使用基本相同,学会pymysql,使用MySQLdb也就不是 ...
- KMP算法总结
kmp算法的T子字符串的下标的变化规律 大话数据结构这边书中的KMP算法的讲解跟最终的算法代码还是有很大的差别 java语言只会if判断语句,循环语句,但是这些语句以及可以包罗万象了,可以适用很多情况 ...
- 读写XML
XML: 代码: //实例化 XmlDocument xmldc = new XmlDocument(); //加载xml文件,参数是路径. xmldc.Load("C:/Users/Des ...
- HTML5 Blob与ArrayBuffer、TypeArray和字符串String之间转换
1.将String字符串转换成Blob对象 //将字符串 转换成 Blob 对象 var blob = new Blob(["Hello World!"], { type: 'te ...
- oracle 添加表分区
alter table DF_WRITE_FILES_H add partition DF_WRITE_FILES_H96 values less than (201512) tablespace T ...
- Swift - 09 - Optionals
//: Playground - noun: a place where people can play import UIKit // swift中没有被赋值的变量是不能被使用的 //var str ...
- MySQL 管理
MySQL 管理 启动及关闭 MySQL 服务器 首先,我们需要通过以下命令来检查MySQL服务器是否启动: ps -ef | grep mysqld 如果MySql已经启动,以上命令将输出mysql ...