package com.mao.hbase;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.CompareOperator;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.*;
import org.apache.hadoop.hbase.util.Bytes;
import org.junit.Test;
import java.io.IOException;
import java.util.Iterator;
public class HbaseFilteTest {
private Connection hbaseConn() throws IOException {
//创建conf对象
Configuration conf = HBaseConfiguration.create();
//通过连接工厂创建连接对象
return ConnectionFactory.createConnection(conf);
}
/**
* 行过滤器
* select * from ns1:t1 where rowkey <= row100
* @throws IOException
*/
@Test
public void testRowFilter() throws IOException {
TableName tableName = TableName.valueOf("ns1:t1");
Scan scan = new Scan();
RowFilter rowFilter = new RowFilter(CompareOperator.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("row1000")));
scan.setFilter(rowFilter);
Table t = hbaseConn().getTable(tableName);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
System.out.println(Bytes.toString(r.getRow()));
}
}
/**
* 列族过滤器
* @throws IOException
*/
@Test
public void testFamilyFilter() throws IOException {
TableName tableName = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
FamilyFilter filter = new FamilyFilter(CompareOperator.LESS,new BinaryComparator(Bytes.toBytes("f2")));
scan.setFilter(filter);
Table t = hbaseConn().getTable(tableName);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("id"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("id"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f2id:"+Bytes.toString(f2id));
}
}
/**
* 列过滤器
* @throws IOException
*/
@Test
public void testQualifierFilter() throws IOException {
TableName tableName = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
QualifierFilter filter = new QualifierFilter(CompareOperator.EQUAL,new BinaryComparator(Bytes.toBytes("id")));
scan.setFilter(filter);
Table t = hbaseConn().getTable(tableName);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("id"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("id"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* 值过滤器
* 过滤value的值,含有指定的字符子串
* @throws IOException
*/
@Test
public void testValueFilter() throws IOException {
TableName tableName = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
ValueFilter filter = new ValueFilter(CompareOperator.EQUAL,new SubstringComparator(".1"));
scan.setFilter(filter);
Table t = hbaseConn().getTable(tableName);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("id"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("name"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("id"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* 依赖列过滤器
*
* @throws IOException
*/
@Test
public void testDepFilter() throws IOException {
TableName tableName = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
DependentColumnFilter filter = new DependentColumnFilter(Bytes.toBytes("f2"),
Bytes.toBytes("name"),
false,
CompareFilter.CompareOp.NOT_EQUAL,
new BinaryComparator(Bytes.toBytes("tom2.1")));
scan.setFilter(filter);
Table t = hbaseConn().getTable(tableName);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("id"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("name"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("id"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* 单列值过滤器
* 对列上的value进行过滤,不符合整行删除
* @throws IOException
*/
@Test
public void testSingleColumValueFilter() throws IOException {
TableName tableName = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("f2"),
Bytes.toBytes("name"),
CompareFilter.CompareOp.NOT_EQUAL,
new BinaryComparator(Bytes.toBytes("tom2.1")));
scan.setFilter(filter);
Table t = hbaseConn().getTable(tableName);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("id"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("name"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("id"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* 单列值排除过滤器,去掉过滤使用的列,对列的值进行过滤
*/
@Test
public void testSingleColumnValueExcludeFilter() throws IOException {
TableName tableName = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
SingleColumnValueExcludeFilter filter = new SingleColumnValueExcludeFilter(Bytes.toBytes("f1"),
Bytes.toBytes("name"),
CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes("tom2.1")));
scan.setFilter(filter);
Table t = hbaseConn().getTable(tableName);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("id"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("name"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("id"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* 前缀过滤器
* 是rowkey过滤. where rowkey like 'row22%'
* @throws IOException
*/
@Test
public void testPrefixFilter() throws IOException {
TableName tableName = TableName.valueOf("ns1:t1");
Scan scan = new Scan();
PrefixFilter rowFilter = new PrefixFilter(Bytes.toBytes("row222"));
scan.setFilter(rowFilter);
Table t = hbaseConn().getTable(tableName);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
System.out.println(Bytes.toString(r.getRow()));
}
}
/**
* 分页过滤,是rowkey过滤,在region上扫描时,对每次page设置的大小。
* 返回到到client,设计到每个Region结果的合并。
*/
@Test
public void testPageFilter() throws IOException {
Configuration conf = HBaseConfiguration.create();
Connection conn = ConnectionFactory.createConnection(conf);
TableName tname = TableName.valueOf("ns1:t1");
Scan scan = new Scan();
PageFilter filter = new PageFilter(10);
scan.setFilter(filter);
Table t = conn.getTable(tname);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()){
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("id"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"),Bytes.toBytes("name"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("id"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"),Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* keyOnly过滤器,只提取key,丢弃value.
* @throws IOException
*/
@Test
public void testKeyOnlyFilter() throws IOException {
Configuration conf = HBaseConfiguration.create();
Connection conn = ConnectionFactory.createConnection(conf);
TableName tname = TableName.valueOf("ns1:t1");
Scan scan = new Scan();
KeyOnlyFilter filter = new KeyOnlyFilter();
scan.setFilter(filter);
Table t = conn.getTable(tname);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()) {
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("id"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("id"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("name"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* ColumnPageFilter,列分页过滤器,过滤指定范围列,
* select ,,a,b from ns1:t7
*/
@Test
public void testColumnPageFilter() throws IOException {
Configuration conf = HBaseConfiguration.create();
Connection conn = ConnectionFactory.createConnection(conf);
TableName tname = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
ColumnPaginationFilter filter = new ColumnPaginationFilter(2,2);
scan.setFilter(filter);
Table t = conn.getTable(tname);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()) {
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("id"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("id"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("name"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* 正则测试
*/
@Test
public void testLike() throws IOException {
Configuration conf = HBaseConfiguration.create();
Connection conn = ConnectionFactory.createConnection(conf);
TableName tname = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
ValueFilter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL,
new RegexStringComparator("^tom")
);
scan.setFilter(filter);
Table t = conn.getTable(tname);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()) {
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("id"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("id"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("name"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name));
}
}
/**
* 复杂查询
*select * from t7 where ((age <= 13) and (name like '%tom') or (age >= 14) and (name like 't%'))
*/
@Test
public void testComboFilter() throws IOException {
TableName tname = TableName.valueOf("ns1:t7");
Scan scan = new Scan();
//age<=13
SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("f2"),
Bytes.toBytes("age"),
CompareFilter.CompareOp.LESS_OR_EQUAL,
new BinaryComparator(Bytes.toBytes("13")));
//name like '%tom'
SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("f2"),
Bytes.toBytes("name"),
CompareFilter.CompareOp.LESS_OR_EQUAL,
new RegexStringComparator("^tom"));
FilterList fa = new FilterList(FilterList.Operator.MUST_PASS_ALL);
fa.addFilter(filter1);
fa.addFilter(filter2);
//age<=13
SingleColumnValueFilter ft1 = new SingleColumnValueFilter(Bytes.toBytes("f2"),
Bytes.toBytes("age"),
CompareFilter.CompareOp.GREATER_OR_EQUAL,
new BinaryComparator(Bytes.toBytes("14")));
//name like '%tom'
SingleColumnValueFilter ft2 = new SingleColumnValueFilter(Bytes.toBytes("f2"),
Bytes.toBytes("name"),
CompareFilter.CompareOp.LESS_OR_EQUAL,
new RegexStringComparator("tom$"));
FilterList fb = new FilterList(FilterList.Operator.MUST_PASS_ALL);
fb.addFilter(filter1);
fb.addFilter(filter2);
FilterList filterAll = new FilterList(FilterList.Operator.MUST_PASS_ONE);
filterAll.addFilter(fa);
filterAll.addFilter(fb);
scan.setFilter(filterAll);
Table t = hbaseConn().getTable(tname);
ResultScanner rs = t.getScanner(scan);
Iterator<Result> it = rs.iterator();
while (it.hasNext()) {
Result r = it.next();
byte[] f1id = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("id"));
byte[] f1age = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("age"));
byte[] f1name = r.getValue(Bytes.toBytes("f1"), Bytes.toBytes("name"));
byte[] f2id = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("id"));
byte[] f2age = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("age"));
byte[] f2name = r.getValue(Bytes.toBytes("f2"), Bytes.toBytes("name"));
System.out.println("f1id: "+Bytes.toString(f1id)+", f1name:"+Bytes.toString(f1name)+", f1age:"+Bytes.toString(f1age)
+", f2id:"+Bytes.toString(f2id)+", f2name:"+Bytes.toString(f2name)+", f2age:"+Bytes.toString(f2age));
}
}
/**
*测试计数器
*/
@Test
public void testIncr() throws IOException {
Configuration conf = HBaseConfiguration.create();
Connection conn = ConnectionFactory.createConnection(conf);
TableName tname = TableName.valueOf("ns1:t8");
Table t = conn.getTable(tname);
Increment incr = new Increment(Bytes.toBytes("row1"));
incr.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("daily"),1);
incr.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("weekly"),10);
incr.addColumn(Bytes.toBytes("f1"),Bytes.toBytes("monthly"),100);
t.increment(incr);
}
}
Hbase 过滤器
猜你喜欢
转载自blog.csdn.net/mao502010435/article/details/89373315
今日推荐
周排行