FamilyFilter 用于过滤Family
package com.fatkun.filter;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
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.BinaryComparator;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.FamilyFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.util.Bytes;
public class TestHbaseFamilyFilter {
String tableName = "test_family_filter";
Configuration config = HBaseConfiguration.create();
/**
* 部分代码来自hbase权威指南
* @throws IOException
*/
public void testRowFilter() throws IOException {
HTable table = new HTable(config, tableName);
Scan scan = new Scan();
System.out.println("只列出小于data2的列");
Filter filter1 = new FamilyFilter(CompareFilter.CompareOp.LESS,
new BinaryComparator(Bytes.toBytes("data2")));
scan.setFilter(filter1);
ResultScanner scanner1 = table.getScanner(scan);
for (Result res : scanner1) {
System.out.println(res);
}
scanner1.close();
System.out.println("get也可以设置filter");
Get get1 = new Get(Bytes.toBytes("row005"));
get1.setFilter(filter1);
Result result1 = table.get(get1);
System.out.println("Result of get(): " + result1);
}
/**
* 初始化数据
*/
public void init() {
// 创建表和初始化数据
try {
HBaseAdmin admin = new HBaseAdmin(config);
if (!admin.tableExists(tableName)) {
HTableDescriptor htd = new HTableDescriptor(tableName);
HColumnDescriptor hcd1 = new HColumnDescriptor("data1");
htd.addFamily(hcd1);
HColumnDescriptor hcd2 = new HColumnDescriptor("data2");
htd.addFamily(hcd2);
HColumnDescriptor hcd3 = new HColumnDescriptor("data3");
htd.addFamily(hcd3);
admin.createTable(htd);
}
HTable table = new HTable(config, tableName);
table.setAutoFlush(false);
int count = 50;
for (int i = 1; i <= count; ++i) {
Put p = new Put(String.format("row%03d", i).getBytes());
p.add("data1".getBytes(), String.format("col%01d", i % 10)
.getBytes(), String.format("data1%03d", i).getBytes());
p.add("data2".getBytes(), String.format("col%01d", i % 10)
.getBytes(), String.format("data2%03d", i).getBytes());
p.add("data3".getBytes(), String.format("col%01d", i % 10)
.getBytes(), String.format("data3%03d", i).getBytes());
table.put(p);
}
table.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
TestHbaseFamilyFilter test = new TestHbaseFamilyFilter();
test.init();
test.testRowFilter();
}
}