相关知识


创建表插入数据删除等见: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使用(二)---查询及过滤器的更多相关文章

  1. 第四部分 数据搜索之使用HBASE的API实现条件查询

    因为数据清洗部分需要用到Mapreduce,所以先解决hbase的问题,可以用命令先在hbase存一下简单的数据进行查询,之后只要替换数据就可以实现了原本功能 在看该部分前,确保Hase API看了, ...

  2. HBase 相关API操练(二):Java API

    一.HBase Java编程 (1)HBase是用Java语言编写的,它支持Java编程: (2)HBase支持CRUD操作:Create,Read,Update和Delete: (3)Java AP ...

  3. 第六部分 数据搜索之使用HBASE的API实现条件查询

    题目 使用HADOOP的MAPReduce,实现以下功能: (1)基于大数据计算技术的条件查询:使用mapreduce框架,实现类似Hbase六个字段查询的功能 (2)时段流量统计:以hh:mm:ss ...

  4. HBASE的读写以及client API

    一:读写思想 1.系统表 hbase:namespace 存储hbase中所有的namespace的信息 hbase:meta rowkey:hbase中所有表的region的名称 column:re ...

  5. 073 HBASE的读写以及client API

    一:读写思想 1.系统表 hbase:namespace 存储hbase中所有的namespace的信息 hbase:meta rowkey:hbase中所有表的region的名称 column:re ...

  6. TFS API:二、TFS 代码查询工作项

    TFS API:二.TFS  代码查询工作项 首先我们需要认识TFS的两大获取服务对象的类. 他们分别为TfsConfigurationServer和TfsTeamProjectCollection, ...

  7. HBase总结(十二)Java API 与HBase交互实例

    HBase提供了Java Api的訪问接口,掌握这个就跟Java应用使用RDBMS时须要JDBC一样重要 import java.io.IOException; import org.apache.h ...

  8. Elasticsearch Java Rest Client API 整理总结 (二) —— SearchAPI

    目录 引言 Search APIs Search API Search Request 可选参数 使用 SearchSourceBuilder 构建查询条件 指定排序 高亮请求 聚合请求 建议请求 R ...

  9. 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. ...

随机推荐

  1. PHP安全编程:HTTP请求欺骗(转)

    一个比欺骗表单更高级和复杂的攻击方式是HTTP请求欺骗.这给了攻击者完全的控制权与灵活性,它进一步证明了不能盲目信任用户提交的任何数据. 为了演示这是如何进行的,请看下面位于http://exampl ...

  2. linux c 系统报错

    本文中的错误是指在代码编译完全正确程序可运行的情况下,因为没有成功调用程序中的某些系统调用函数而产生的错误.往往这些系统调用函数通过返回值(比如1,0,-1)来说明其是否调用成功,而程序员需要知道详细 ...

  3. Analyzing UI Performance with Systrace 使用systrace工具分析ui性能

    While developing your application, you should check that user interactions are buttery smooth, runni ...

  4. HDU 1756 Cupid's Arrow 判断点在多边形的内部

    Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  5. 基于Bootstrap实现下图所示效果的页面,一个白底的带有两个菜单项、一个下拉菜单和一个登录表单的基本导航条

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  6. vedeo与audio标签的使用

    浏览器原生支持音视频无疑是一件大事——尤其对移动设备而言.不依赖Flash,意味着更加省电.安全和快速的播放体验,而且只需要引入一个标签,就能播放自如. <video src="dao ...

  7. 【转】JAVA的StringBuffer类

    [转]JAVA的StringBuffer类    StringBuffer类和String一样,也用来代表字符串,只是由于StringBuffer的内部实现方式和String不同,所以StringBu ...

  8. C# Wpf双向绑定实例

    Wpf中双向绑定处理需要两处 实例1: 1.前台Xaml中属性Binding 时Model指定 TwoWay <Grid> <Ellipse x:Name="ellipse ...

  9. 关于java中Double类型的运算精度问题(转)

    Java Java double:浮点数:精确计算  public class Test{    public static void main(String args[]){        Syst ...

  10. Android虚拟机GenyMotion-- 遇到的问题

    问题: android studio 检测不到 genymotion 原因:没有设置genymotion的adb,也就是sdk的路径. 解决方法:打开genymotion的主页面,设置sdk的位置为你 ...