HBase查询(1)---Comparision Filters比较过滤器

本文介绍了HBase中的RowFilter过滤器,通过示例代码展示了如何使用LESS_OR_EQUAL、EQUAL以及RegexStringComparator和SubstringComparator进行行级别的数据过滤。测试过滤器输出了符合条件的行数据。
摘要由CSDN通过智能技术生成

1.1  RowFilter

构造函数

public RowFilter(CompareOp rowCompareOp, WritableByteArrayComparable rowComparator) {} 

选择比较rowkey来确定选择合适的行信息。

示例代码:

package filter;

import java.io.IOException;

import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.util.Bytes;

public class RowFilterExample extends FilterExampleBase{


	public static void main(String[] args) throws IOException {
		new RowFilterExample().doMain();
	}
	
	@Override
	public void testFilter() throws IOException {
		System.out.println("-----------------testFilter() start-------------");
		HTable table = new HTable(config, tableName);

		Scan scan = new Scan();
		// scan.addColumn(Bytes.toBytes("c1"), Bytes.toBytes("a"));

		Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, 
                                       new BinaryComparator(Bytes.toBytes("r2")));
		scan.setFilter(filter1);
		ResultScanner scanner1 = table.getScanner(scan);
		showScanner(scanner1);
		scanner1.close();

		showLine();
		Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL, 
                                   new RegexStringComparator(".*3"));
		scan.setFilter(filter2);
		ResultScanner scanner2 = table.getScanner(scan);
		showScanner(scanner2);
		scanner2.close();

		showLine();
		Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL, 
                                new SubstringComparator("4"));
		scan.setFilter(filter3);
		ResultScanner scanner3 = table.getScanner(scan);
		showScanner(scanner3);
		scanner3.close();
		System.out.println("-----------------testFilter() end-------------");
	}
}

结果:
start create table......
test is exist delete!!!
create table over......
start insert......
end insert......


-----------------findAll() start-------------
{rowkey:r1 c1:a=r1c1a c1:b=r1c1b c2:a=r1c2a c2:b=r1c2b}
{rowkey:r2 c1:a=r2c1a c2:b=r2c2b}
{rowkey:r3 c1:a=c1a c1:b=r3c1b c2:a=r3c2b c2:b=r3c2b}
{rowkey:r4 c1:a=c1a c1:b=r4c1b c2:a=r4c2b c2:b=r4c2b}
-----------------findAll() end-------------


-----------------testFilter() start-------------
{rowkey:r1 c1:a=r1c1a c1:b=r1c1b c2:a=r1c2a c2:b=r1c2b}
{rowkey:r2 c1:a=r2c1a c2:b=r2c2b}
-----------------
{rowkey:r3 c1:a=c1a c1:b=r3c1b c2:a=r3c2b c2:b=r3c2b}
-----------------
{rowkey:r4 c1:a=c1a c1:b=r4c1b c2:a=r4c2b c2:b=r4c2b}
-----------------testFilter() end-------------

 1.2  FamilyFilter

构造函数

public FamilyFilter(CompareOp familyCompareOp, WritableByteArrayComparable familyComparator) {}  

通过和列簇比较得到,返回结果为真的数据,示例: 

package filter;

import java.io.IOException;

import org.apache.hadoop.hbase.client.Get;
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;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.SubstringComparator;
import org.apache.hadoop.hbase.filter.ValueFilter;
import org.apache.hadoop.hbase.util.Bytes;

public class FamilyFilterExample extends FilterExampleBase{

	public static void main(String[] args) throws IOException {
		new FamilyFilterExample().doMain();
	}

	public void testFilter() throws IOException {

		Filter filter = new ValueFilter(CompareFilter.CompareOp.EQUAL, 
                                           new SubstringComparator("c1"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值